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无缘无故客户端主动断开原因