Websockets 仅在 Socket.io 1.3.4 中传输

Websockets transport only in Socket.io 1.3.4

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

看起来它启动了轮询连接,然后如果 "it" 需要则升级到 websockets。我希望它启动并始终只在 websockets 上工作。

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

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

所以,简短的回答是,如果您查看网络跟踪,您可能会认为它是从 http 轮询开始的,但实际上那只是启动 webSocket 连接的 HTTP 请求。本来就是这样的。

如果您想了解更多关于如何建立 webSocket 连接的信息,您可以阅读 this nice summary

这是启动 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。

成功 "upgrade" 后,此套接字仅使用 webSocket 协议。