node.js – socket.io何时使用轮询而不是websockets?

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

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

解决方法

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

IE10和其他浏览器的所有最新版本都支持webSockets.

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

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

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

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

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...