从浏览器发送网络袜子平/乒乓球框架

2022-08-30 02:40:53

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

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

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


答案 1

没有 Javascript API 来发送 ping 帧或接收 pong 帧。您的浏览器是否支持此功能。也没有API来启用,配置或检测浏览器是否支持并使用ping /pong框架。有人讨论过为此创建一个Javascript ping/pong API。将来ping有可能是可配置的/可检测的,但Javascript不太可能直接发送和接收ping/pong帧。

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


答案 2

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

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

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