Websockets只在Socket.io 1.3.4中传输

当我使用Socket.io 0.9.16时,我可以设置所需的和唯一的传输(websockets)。 没有我升级到版本1(1.3.4),并不明白,如何限制运输。

看起来它开始与轮询连接,然后升级到websockets,如果“它”想要的。 我希望它开始,并始终只在websockets上工作。

所有webSocket连接都以HTTP请求开始。 这就是规范如何适用于webSocket。 客户端请求升级到第一个HTTP请求中的webSocket协议,如果服务器同意,则套接字“升级”到webSocket协议。

如果服务器不支持webSocket并且不同意升级,那么socket.io也会发送带有第一个http请求的轮询参数,所以如果它不切换到webSocket,它将立即以http轮询启动。

所以,简单的答案是,如果你看networking跟踪,你可能会认为它开始于http轮询,但这实际上只是启动webSocket连接的HTTP请求。 这是它应该的方式。

如果你想了解更多关于如何build立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协议是如何devise的,使相同的networking基础架构可以同时支持HTTP连接和webSocket连接,并允许客户端查询服务器是否支持webSocket。

成功“升级”之后,只有webSocket协议在这个套接字上说出来。