当我读到websockets时,通常会提到心跳是必须的。 MDN甚至写了special opcode for heartbeats。
但心跳是websockets的必备部分吗?我必须实现它,否则我的websockets将被浏览器或其他标准终止?
答案 0 :(得分:10)
WebSocket协议的当前参考RFC 6455定义了一些控制帧来传达有关WebSocket的状态:
0x8
0x9
0xA
Ping和Pong用于心跳,并允许您检查客户端是否仍然具有响应性。请参阅下面的quote:
Ping帧可以作为keepalive或作为一种手段 验证远程端点是否仍然响应。
但是当客户端获得Ping时,必须将Pong发送回服务器。请参阅quote:
收到Ping帧后,端点必须发送Pong帧 响应,除非它已经收到一个关闭框架。这应该 尽快回应Pong框架。
在设计两者客户端和服务器时,支持心跳取决于您。但是如果你需要检查连接是否仍然存在,Ping和Pong帧是标准的方法。
请记住,如果发送了Ping并且没有发回Pong,则一个对等体可能会认为另一个对等体不再存在。
答案 1 :(得分:5)
取决于客户端和服务器实现,它是强制性的还是非强制性的。如果您连接到要求您使用PONG应答PING的服务器,则在您不回复时可能会断开连接。如果您是服务器且客户端正在向您发送PING,则相同。
服务器和客户端实现各不相同(有无数种),但是 浏览器的javascript客户端不发送PING,并且不提供任何API,尽管它使用PONG回复PING。
答案 2 :(得分:2)
P ping和Pongs不是强制性的。它们很有用,因为它们允许检测掉线连接。 (如果线路上没有一些流量,则无法检测断开的连接。)
请注意,在浏览器中,无法访问WebSocket心跳。如果您需要浏览器客户端代码来检测已断开的连接,则必须在应用程序级别实施听力操作。