Websockets仅在Socket.io 1.3.4中传输

Websockets transport only in Socket.io 1.3.4

本文关键字:传输 仅在 Socket io Websockets      更新时间:2023-09-26

当我使用Socket.io 0.9.16时,我可以设置所需的也是唯一的传输(websockets)。不,我升级到了版本1(1.3.4),无法理解如何限制传输。

看起来它启动了一个与轮询的连接,然后如果"它"愿意,升级到websocket。我希望它开始,并且总是只在websocket上工作。

所有webSocket连接都以HTTP请求开始。这就是webSocket规范的工作原理。客户端在第一个HTTP请求中请求升级到webSocket协议,如果服务器同意,则套接字将"升级"到webSockets协议。

如果服务器不支持webSocket并且不同意升级,socket.io还会在第一个http请求中发送轮询参数,因此如果它不切换到webSocket,那么它将立即开始http轮询。

因此,简单的答案是,如果你查看网络跟踪,你可能会认为它是从http轮询开始的,但这实际上只是启动webSocket连接的http请求。这就是它应该有的样子。

如果你想了解更多关于webSocket连接是如何建立的,你可以阅读这个很好的摘要。

以下是启动webSocket连接的请求:

GET /chat HTTP/1.1
Host: example.com:8000
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13

这里有一个服务器响应,同意升级到webSocket连接:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

这就是webSocket协议的设计方式,使相同的网络基础设施能够同时支持HTTP连接和webSocket连接,并允许客户端查询服务器以查看其是否支持webSocket。

在成功的"升级"之后,只有webSocket协议在这个套接字上被使用。