socket.io什么时候使用轮询而不是websockets?

时间:2015-06-19 00:26:24

标签: node.js nginx websocket socket.io

我对socket.io很新,并在node / express / socket.io中编写了我的第一个应用程序。现在一切都在我的nginx服务器上运行良好。我想向公众发布我的应用程序,但我担心它不适用于很多人。我有几个朋友测试我的应用程序,一切顺利(这是一个非常简单的应用程序)。这是我的担忧:现在每个连接似乎都在使用websockets,这就是我想要的。但是,由于客户端的一些奇怪的东西,我的应用程序有时会降级为“轮询”吗?如果是这样,socket.io如何决定何时使用轮询以及何时使用websocket(它是基于浏览器/版本或连接还是什么)?我很确定它在可能的情况下使用websocket,但是有一个列表可以将其归结为“轮询”吗?另外,有没有一种方法可以通过使用“轮询”来测试我的应用程序,看它是否有效?

我可以发布代码,但我认为这是关于socket.io如何工作的一般性问题。

1 个答案:

答案 0 :(得分:6)

客户端降级到ajax轮询的唯一时间(假设您的服务器确实支持它)当浏览器客户端不支持webSockets(例如,一个非常老的客户端)或者可能是某个代理时客户端路径不支持webSockets。

IE10 +支持webSockets以及其他浏览器的所有最新版本。

所以,实际上,它实际上只是IE8或IE9,或者是一个行为不当的代理,你可能看不到客户端的webSocket支持。

没有其他条件(除了缺乏支持)将导致"敲打"连接到民意调查。

您可以通过仅在从客户端连接时传递xhr-polling传输选项来临时测试您的应用程序,以告知客户端这是唯一允许的传输选项。

请记住,所有webSocket连接都以HTTP请求开始,然后升级"如果双方同意,那么如果您从浏览器查看网络跟踪,则应该看到webSocket协议,您应该看到每个webSocket连接都以HTTP请求开始 - 这是正常的。并且,在最新版本的socket.io中,它实际上可能会在成功尝试并切换到实际的webSocket之前与轮询传输交换一些数据包。