WebSocket - 关闭框架

Posted

技术标签:

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

websocket RFC 声明如下:

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

后面还提到:

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

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

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

【问题讨论】:

【参考方案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.

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

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

【讨论】:

是否有一种方法可以识别它是哪种近框。根据 RFC 6455“关闭框架可能包含指示关闭原因的主体(框架的“应用程序数据”部分),”我试图弄清楚这一点一段时间。

以上是关于WebSocket - 关闭框架的主要内容,如果未能解决你的问题,请参考以下文章

在 Angular2 应用程序中使用 angular2-websocket 关闭 websocket 连接时,如何重新连接它?

请教html5的websocket无缘无故客户端主动断开原因

websocket连接不上、报错、自动关闭,求解

WebSocket 连接到 'ws:url' 失败:WebSocket 在连接建立之前关闭

怎么在服务器端关闭websocket连接

WebSocket - 关闭握手 Gorilla