从浏览器发送 websocket ping/pong 帧

新手上路,请多包涵

我一直在阅读 websockets 中的 ping/pong 消息以保持连接有效,但我不确定它们是什么。它是一种独特的帧类型吗? (我没有在 chrome 中的 javascript WebSocket 对象上看到任何与乒乓球相关的方法)。或者它只是一种设计模式(例如,我从字面上向服务器发送“ping”或任何其他字符串并让它响应)。乒乓球是否与延续帧有关?

我问的原因是我正在使用在 Mongrel2 后面运行的 python 框架,所以我想知道是否有一种方法可以向 Mongrel2 发送特定的 ping/pong 消息,告诉它在不需要我的 python 应用程序的情况下保持连接担心它。我想这类似于为它提供单独的 HTTP 方法。我想专用的 ping/pong 消息框架可能比字符串“ping”更简单(服务器和网络上的负载更少),尽管这可能无关紧要。

编辑:我刚刚查看了 RFC 6455 ,看起来 Ping 和 Pong 绝对是具有自己的操作码的控制帧类型。那么如何在 Chrome 中从 javascript 发送 Ping 帧呢?

原文由 danny 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.5k
2 个回答

没有用于发送 ping 帧或接收 pong 帧的 Javascript API。您的浏览器是否支持此功能。也没有 API 来启用、配置或检测浏览器是否支持和正在使用 ping/pong 帧。有 关于为此创建 Javascript ping/pong API 的讨论。未来 ping 有可能是可配置/可检测的,但 Javascript 不太可能直接发送和接收 ping/pong 帧。

但是,如果您同时控制客户端和服务器代码,那么您可以轻松地在更高级别添加 ping/pong 支持。如果您还没有的话,您将需要在您的消息中使用某种消息类型的标头/元数据,但这很简单。除非您计划每秒发送数百次 ping 或同时有数千个客户端,否则您自己完成的开销将非常小。

原文由 kanaka 发布,翻译遵循 CC BY-SA 3.0 许可协议

更新: 虽然答案是旧的,但它在谷歌的顶级结果中。 在握手后的任何时刻,客户端或服务器都可以选择向对方发送 ping

Ping 仅用于从服务器发送到客户端,浏览器应尽快使用 Pong OpCode 自动应答。所以你不必担心更高层次的问题。

虽然并不是所有的浏览器都像他们想象的那样支持标准,但它们在实现这种机制时可能会有一些差异,甚至可能意味着没有 Pong 响应功能。但我个人使用的是 Ping / Pong,从未见过不实现这种类型的 OpCode 和低级别客户端实现自动响应的客户端。

原文由 moka 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏