【问题标题】:Use of WebSocket ping application data使用 WebSocket ping 应用程序数据
【发布时间】:2013-06-21 20:31:53
【问题描述】:
WebSocket ping 帧除了将其标识为 ping 帧的操作码外,可能包含也可能不包含应用程序数据。
据我了解,ping/pong 的目的是防止 TCP 连接超时。这些帧包含尽可能小的虚拟数据(即操作码),并尽可能频繁地发送以表明连接仍在使用中。
还有更多吗?如果我从未在 ping 帧中发送应用程序数据,我会错过任何东西吗?例如,如果我在 ping 中发送令牌以建立 ping 和 pong 之间的对应关系,以通过发送 ping 和接收相应 pong 之间的时间来判断连接质量,我是否会滥用 ping/pong?
【问题讨论】:
标签:
tcp
network-programming
websocket
【解决方案1】:
Ping 和 pong 帧允许有效载荷,如果在 ping 中发送,将由相应的 pong 返回。有几个原因,它们可能对应用程序数据没有用处。
- 有效载荷仅为二进制且限制为 125 个字节。
- 仅响应最近的 ping 而不是单独响应每个 ping 是合法的。
- 许多 WebSocket 接口(尤其包括浏览器提供给 JavaScript 的接口)不会向应用程序公开 ping 和 pong。
也就是说,所有符合 RFC6455 的 WebSocket 实现都会回复 ping,即使他们不让他们的应用程序知道它们或允许他们的应用程序发送自己的。这使得使用 ping/pong 及其有效负载绝对适用于 keepalive 消息或其他网络级别的统计信息或簿记。