socket.io中的pingtimeout和pingInterval

roh*_*dev 3 timeout node.js socket.io

如果我设置pingTimeout: 3000pingInterval: 2000; 如果同时有800个插座连接; 这会对服务器性能有任何问题或提供延迟吗?当socket.io文档说服务器将等待pingTimeout(ms)断开套接字(如果它没有获得pong数据包)(这意味着套接字空闲)时,我们的意思是什么.当我们说套接字空闲时会涉及哪些情况?这是否意味着如果用户在页面上处于活动状态但未点击任何内容,则表示套接字是否空闲?

jfr*_*d00 7

socket.io使用活动方案(而不是被动方案)来检测socket.io连接何时因任何原因而断开连接或无法正常工作.

此活动方案涉及客户端ping定期向服务器发送数据包并等待pong从服务器返回的时间间隔.

从客户端来看,pingInterval发送ping数据包的频率是pingTimeout多少,并且在得出连接出现问题之前等待pong数据包从服务器返回的时间有多长,它应该丢弃连接然后尝试重新连接.

类似地,服务器期望每个ping数据包到达pingInterval,如果没有到达,则服务器将断定连接已经以某种方式死亡.

因此,您设置的时间越短pingInterval,客户端从服务器发送ping和接收pong回来的频率就越高,同样,服务器ping从客户端接收并发送回来的频率也越高pong.

"空闲"socket.io连接仍在发送pingpong消息.

如果同时有800个插座连接; 这会对服务器性能有任何问题或提供延迟

服务器可以处理多少个并发连接涉及很多变量,而您实际上并没有提供任何相关信息来了解您的特定情况.以下是确定它的一些事项:

  1. 服务器网络的速度有多快.
  2. 服务器CPU的速度有多快.
  3. 正在发送多少个其他socket.io消息.
  4. 通过socket.io连接发送了多少其他数据.
  5. 还要求node.js服务器做什么.
  6. 操作系统配置(内存,允许的总套接字等).
  7. 服务器总内存和node.js配置内存.
  8. 每个连接执行ping和pong的频率.
  9. 客户端重新连接的频率(例如,当他们浏览网站时 - 每个页面加载都会丢弃先前的socket.io连接并且必须建立新的连接).

通常,800个并发连接数量相对较少,如果整体数据使用率较低且配置以其他方式优化,许多安装可以处理这种情况.有一些服务器安装可以处理数千个同时连接.

当我们说套接字空闲时会涉及哪些情况?

我不确定你的意思是"什么情况".空闲的socket.io连接意味着没有消息在任何一个方向上流动.当连接空闲时,socket.io使用ping和pong数据包来"测试"连接,以确保它仍在工作.

这是否意味着如果用户在页面上处于活动状态但未点击任何内容,则表示套接字是否空闲?

当您的代码未在套接字上发送或接收任何内容时,套接字处于空闲状态.这可能与用户点击的内容有关,也可能没有.这完全取决于您的应用程序.例如,股票报价器应用程序可能每隔几秒就通过socket.io接收股票价格更新,并且即使最终用户从未点击网页中的任何内容,该连接也几乎永远不会闲置.