【问题标题】:WebSocket - Close FrameWebSocket - 关闭框架
【发布时间】:2016-02-03 20:06:47
【问题描述】:

websocket RFC 声明如下:

如果端点接收到 Close 帧并且之前没有发送 Close 帧,则端点必须发送 Close 帧作为响应。

后面还提到:

服务器必须立即关闭底层 TCP 连接;

服务器启动关闭握手是有意义的,因为从客户端检索关闭帧响应后,服务器可以进行 TCP 关闭。

当关闭握手从客户端开始时会发生什么?客户端是否应该重新发送某种类型的消息来指示服务器端点进行 TCP 关闭?还是服务器应该在检索关闭帧时执行 tcp 关闭?

【问题讨论】:

    标签: tcp websocket handshake


    【解决方案1】:

    客户端是否应该重新发送某种类型的消息以指示服务器端点执行 tcp 关闭?

    (a) 这正是 CLOSE FRAME 消息的用途,(b) 不,服务器必须立即关闭 TCP 连接,根据您引用的文本。

    或者服务器是否应该在检索关闭帧时执行 tcp 关闭?

    这正是它所说的。当然是在向客户端发送 CLOSE FRAME 之后。

    【讨论】:

      【解决方案2】:

      正如你所说,RFC 说:

      If an endpoint receives a Close frame and did not previously send a Close frame, the endpoint MUST send a Close frame in response.
      

      这适用于服务器和客户端。因此,当关闭来自客户端时,会发生以下情况:

      1. 客户端发送Close
      2. 服务器接收到Close 帧并将其回显给客户端,因为它自己没有发送一个
      3. 服务器关闭其 TCP 连接(必须在发送 Close 帧后立即执行此操作)
      4. 客户端关闭其 TCP 连接。它可以在从服务器接收到回显的Close 后直接执行此操作,也可以等到服务器在其结束时关闭它(由于连接状态发生变化,它会知道这一点)

      【讨论】:

      • 是否有一种方法可以识别它是哪种近框。根据 RFC 6455“关闭框架可能包含指示关闭原因的主体(框架的“应用程序数据”部分),”我试图弄清楚这一点一段时间。
      猜你喜欢
      • 1970-01-01
      • 2019-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多