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之前与轮询传输交换一些数据包.

相关文章

Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一...
本地项目配置 1 复制 luffy/settings/dev.py为prop.py 修改l...
nginx不仅可以隐藏版本信息,还支持自定义web服务器信息 先看...
一 、此次漏洞分析 1 nginx HTTP/2漏洞 [nginx-announce] ng...
###进入nginx 目录cd /usr/local/nginx###递归显示 2 级目录...
在cmd命令窗口输入下面命令进行查看 tasklist /fi "ima...