socket.io 使用主动方案(与被动方案相反)来检测 socket.io 连接何时因任何原因断开或无法正常工作。
此活动方案涉及客户端定期向服务器发送ping 数据包并等待pong 时间间隔从服务器返回。
从客户端来看,pingInterval 是发送 ping 数据包的频率,pingTimeout 是在断定存在问题之前等待 pong 数据包从服务器返回的时间与连接,它应该断开连接,然后尝试重新连接。
同样,服务器期望ping 数据包在每个pingInterval 到达,如果没有到达,那么服务器将断定连接以某种方式断开。
因此,您设置的pingInterval 越短,客户端发送ping 并从服务器接收到pong 的频率越高,同样,服务器从服务器接收ping 的频率越高客户端并发回pong。
“空闲”socket.io 连接仍在发送ping 和pong 消息。
如果同时有800个socket连接;这会对服务器性能有任何问题或提供延迟
服务器可以处理多少个同时连接涉及很多变量,您并没有真正提供任何相关信息来了解您的特定情况。以下是确定它的一些因素:
- 服务器的网络速度有多快。
- 服务器的 CPU 速度有多快。
- 还有多少其他 socket.io 消息正在发送。
- 通过 socket.io 连接发送了多少其他数据。
- 还要求 node.js 服务器做什么。
- 操作系统配置(内存、允许的总套接字等)。
- 服务器总内存和 node.js 配置的内存。
- 每个连接执行 ping 和 pong 的频率。
- 客户端重新连接的频率(例如当他们浏览网站时 - 每次页面加载都会断开之前的 socket.io 连接并必须建立一个新连接)。
一般来说,800 个同时连接是一个相对较小的数字,如果总体数据使用量较低并且配置进行了优化,许多安装可以很好地处理这个数字。有些服务器安装可以同时处理数千个连接。
我们说socket空闲时涵盖了哪些情况?
我不确定您所说的“什么情况”是什么意思。空闲的 socket.io 连接意味着没有消息在任一方向流动。当连接空闲时,socket.io 使用 ping 和 pong 数据包来“测试”连接以确保它仍在工作。
这是否意味着如果用户在页面上处于活动状态但没有单击任何内容,那么这是否意味着套接字处于空闲状态?
当您的代码未在套接字上发送或接收任何内容时,套接字处于空闲状态。这可能与用户点击的内容有关,也可能无关。这完全取决于您的应用程序。例如,股票行情应用程序可能每隔几秒就会通过 socket.io 接收股票价格更新,即使最终用户从未点击网页中的任何内容,该连接也几乎永远不会空闲。