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