websockets必须有心跳吗?

Hol*_*r L 14 http websocket

当我读到websockets时,心跳通常被认为是必须的.MDN甚至写了一个关于心跳特殊操作码.

但心跳是websockets的必备部分吗?我是否必须实现它,否则我的websockets将被浏览器或其他标准终止?

cas*_*lin 15

RFC 6455中,WebSocket协议电流参考,定义了一些控制帧有关的WebSocket通信状态:

  • 关: 0x8
  • 平: 0x9
  • 乒乓球: 0xA

Ping和Pong用于心跳,并允许您检查客户端是否仍然响应.请参阅以下报价:

Ping帧可以用作keepalive,也可以用作验证远程端点是否仍然响应的方法.

但是当客户端获得Ping时,必须将Pong发送回服务器.看报价:

收到Ping帧后,端点必须发送Pong帧作为响应,除非它已经收到一个关闭帧.它应该尽快响应Pong框架.

底线

当设计两个客户端和服务器,支持心跳是你.但是如果你需要检查连接是否仍然存在,Ping和Pong帧是标准的方法.

请记住,如果发送了Ping并且没有发回Pong,则一个对等体可能会认为另一个对等体不再存在.

  • 这是在网络浏览器上实现的还是我需要自己手动编码? (6认同)

vto*_*ola 6

它是强制性的还是不强制性的,取决于客户端和服务器的实现。如果您连接到要求您用PONG应答PING的服务器,则您可能会断开连接,以防不回复。如果您是服务器且客户端向您发送PING,则相同。

服务器和客户端的实现各不相同(有无数种实现),但是浏览器的javascript客户端不会发送PING,并且不提供任何API来发送PING,尽管它会回复带有PONG的PING。


gzo*_*ost 6

Ping 和 Pong 不是强制性的。它们很有用,因为它们允许检测断开的连接。(线路上没有一些流量,就无法检测断开的连接。)

请注意,在浏览器中,无法访问 WebSocket 心跳。如果您需要浏览器客户端代码来检测断开的连接,那么您必须在应用程序级别实现检测信号。