从浏览器发送websocket ping / pong框架

时间:2012-05-14 14:30:02

标签: javascript websocket mongrel2

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

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

编辑:我只看了RFC 6455,看起来Ping和Pong肯定是带有自己操作码的控制帧类型。那么如何从Chrome中的javascript发送Ping帧?

3 个答案:

答案 0 :(得分:103)

没有Javascript API来发送ping帧或接收pong帧。这是您的浏览器支持或不支持。也没有API来启用,配置或检测浏览器是否支持并使用ping / pong帧。这有discussion about creating a Javascript ping/pong API。 pings有可能在未来可配置/可检测,但Javascript不太可能直接发送和接收ping / pong帧。

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

答案 1 :(得分:25)

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

虽然并非所有浏览器都支持标准,但它们在实现此类机制时可能会有一些差异,甚至可能意味着没有Pong响应功能。但我个人正在使用Ping / Pong,从未看到客户端没有在低级客户端实现上实现这种类型的OpCode和自动响应。

答案 2 :(得分:1)

js中可能的解决方案

如果几分钟后WebSocket服务器主动断开了react-native run-ios/android链接,则服务器和客户端之间将不会发送任何消息。

  1. 客户端发送自定义ws消息,以使用ping函数保持活动

  2. 服务器忽略keepAlive消息并响应自定义ping消息

pong