当我使用Socket.io 0.9.16时,我可以设置所需的和唯一的传输(websockets)。不,我升级到版本1(1.3.4)并且无法理解,如何限制传输。
看起来它开始与轮询连接,然后如果“它”想要升级到websockets。我希望它开始并且始终只在websockets上工作。
答案 0 :(得分:5)
所有webSocket连接都以HTTP请求开头。这就是规范对webSocket的作用。客户端请求在第一个HTTP请求中升级到webSocket协议,如果服务器同意,则套接字“升级”为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。
成功“升级”后,此套接字上只会说出webSocket协议。