是否在WebSocket握手期间或握手后立即关闭连接?

是否在WebSocket握手期间或握手后立即关闭连接?,websocket,handshake,Websocket,Handshake,根据维基百科的文章:, 在握手过程中,服务器将此响应发送回客户端: HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= Sec-WebSocket-Protocol: chat 这会关闭连接(HTTP响应通常会这样做)还是在整个握手过程中保持打开状态,并且可以立即开始发送WebSocket帧(假设成功)

根据维基百科的文章:, 在握手过程中,服务器将此响应发送回客户端:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat

这会关闭连接(HTTP响应通常会这样做)还是在整个握手过程中保持打开状态,并且可以立即开始发送WebSocket帧(假设成功)?

在握手过程中,要升级到WebSocket协议的HTTP套接字不会关闭。相同的开放套接字贯穿整个过程,然后成为用于webSocket协议的套接字。升级完成后,该套接字就可以根据webSocket协议发送消息

正是使用了完全相同的套接字,使webSocket连接能够与HTTP请求在同一端口上运行(不需要额外的端口),因为它实际上是以HTTP请求(附加了一些额外的头)开始的,然后当这些头被识别并且双方都同意时,然后,原始web端口(通常为端口80)上的原始HTTP请求的套接字被切换为使用webSocket协议。不需要在某些新端口上进行额外连接

事实上,我发现它是一个相对优雅的设计,因为它可以轻松地与web服务器共存,这是一个重要的设计参数。另外,稍微增加一点连接开销(协议升级协商)通常不是问题,因为webSocket连接本质上是设计为长时间运行的套接字,您只需打开一次,并在一段较长的时间内使用,因此打开它们的一点额外开销通常不会影响它们的使用

如果出于任何原因,升级没有完成(双方都不同意升级到webSocket),那么套接字将仍然是HTTP套接字,并将像HTTP套接字一样正常工作(可能会立即关闭,但受正常HTTP交互的影响)

在升级到webSocket的过程中,您可以查看此答案以了解有关来回的更多详细信息: