WebSocket ping帧除了将其标识为ping帧的操作码之外,还可能包含应用程序数据,也可能不包含。
据我所知,乒乓球的目的是防止TCP连接超时。帧包含尽可能小的伪数据(即操作码),并根据需要频繁发送,以表明连接仍在使用。
还有别的吗?如果我从未在ping帧中发送应用程序数据,我会错过什么吗?例如,如果我在ping中发送令牌,以便在ping和pong之间建立对应关系,从而通过发送ping和接收相应pong之间的时间来判断连接质量,我会滥用ping吗?
Ping和pong帧允许一个有效负载,如果在Ping中发送,将由相应的pong返回。它们可能对应用程序数据没有用处,这有几个原因。
- 有效载荷仅为二进制,并且限制为125字节
- 只对最近的ping进行响应是合法的,而不是单独对每个ping进行响应
- 许多WebSocket接口(尤其包括浏览器提供给JavaScript的接口)不会向应用程序公开ping和pong
也就是说,所有符合RFC6455的WebSocket实现都会回复ping,即使它们不让应用程序知道它们,也不允许应用程序发送自己的ping。这使得使用乒乓球及其有效载荷绝对适合于保持活动消息或其他网络级别的统计信息或记账。