2015-06-19 29 views
4

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

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

回答

6

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

在IE10 +和其他浏览器的所有最新版本中都支持webSockets。

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

没有其他条件(除了缺乏支持)将“连接”连接到轮询。


你可以暂时只能从客户端连接到告知客户端,这是唯一允许使用的运输选项时传入XHR轮询的交通方案测试与投票应用程序。


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

+0

嗨,只强调@ jfriend00提出的一点:在socket.io 1.0+中,默认情况下连接**总是**以几个HTTP“轮询”请求开始,但您可以按照[这里]所述跳过这些内容。 http://stackoverflow.com/a/28240802/4080966)。 –

相关问题