理解WebSocket协议中控制帧:close、ping、pong

  • 控制帧

    控制帧用于WebSocket协议交换状态信息,控制帧可以插在消息片段之间。

    所有的控制帧的负载长度均不大于125字节,并且禁止对控制帧进行分片处理。

    目前控制帧的操作码定义了oxo8(关闭帧)、oxo9(Ping帧)、oxoA(Pong帧)。

  • 关闭帧(oxo8)

    关闭帧可能包含数据部分,该部分表名了关闭的原因。

    客户端发送给服务器的关闭帧必须掩码处理。

    应用程序在发送了一个关闭帧后,禁止再发送任何数据(此时处于CLOSING状态)。

    如果断电(客户端或服务器)收到了一个关闭帧,并且之前没有发送过关闭帧,则断电必须发送一个关闭帧作为响应。

    当断电可以发送关闭响应时应尽快发送关闭响应,一个端点可以延迟发送响应直到它的当前消息发送完毕(例如,已经发送了大多数的消息片段,则端点可能会在发送关闭响应帧前先将剩下的消息帧发送出去)。

  • Ping帧(oxo9)

    Ping帧可以包含应用数据。

    一旦接到了一个Ping帧,断点必须返回一个Pong帧作为响应,除非他收到了一个关闭帧。

    它应在可以发送时尽快发送Pong帧响应。

    断电可以再连接建立后一直到连接关闭前任何时候发送Ping帧。

  • Pong帧(oxoA)

    Pong帧必须与Ping帧拥有相同的应用数据部分。

    如果端点收到了多个Ping帧,但还没来的及全部回应,可以只回应最后一个Ping帧。

    Pong帧可以在未收到Ping帧时就被发送,用作单向心跳包。

    不需要对未被请求的Pong帧(对方主动发送的Pong帧)进行回应。

  • Reference

  1. Web技术研究室:WebSocket协议详解及应用(六)-WebSocket协议控制帧结构详解
  2. 【译】WebSocket协议第五章——数据帧(Data Framing)
  3. The WebSocket Protocol

猜你喜欢

转载自blog.csdn.net/The_Time_Runner/article/details/105801461