socket.io传输是“轮询”而不是“websocket”在azure色
我在azure色的网站和configuration面板中启用的websockets有一个非常规的计划。 我使用socket.io和node.js. 客户端和服务器都使用“轮询”作为其传输,而不是websocket。 在服务器上,我有这些行,他们输出“轮询”。
setInterval(function(){ console.log(socket.conn.transport.name); }, 2000);
在localhost上使用的是websocket。 我已经尝试了在其他post中提出的事情,像这样: Socket.io连接恢复到轮询,从不会触发“连接”处理程序 ,但他们确实解决了这个问题。
有没有办法使azure色的工作使用websocket作为运输。
有一个官方的教程文档来帮助在Azure上使用socket.io和wobsocket构buildNodeJS Webapps。 您的问题已在文档https://azure.microsoft.com/zh-CN/documentation/articles/web-sites-nodejs-chat-app-socketio/#troubleshooting上的 “疑难解答”部分得到解答。
为了让Socket.IO使用WebSockets作为消息传输,服务器和客户端都必须支持WebSocket。 如果其中一个没有,Socket.IO将协商另一个传输,例如长轮询。 Socket.IO使用的默认传输列表是websocket,htmlfile,xhr-polling,jsonp-polling。 您可以强制它仅通过将以下代码添加到app.js文件来使用WebSockets。
对于app.js的globol作用域:
io.set('transports', ['websocket']);
或者对于连接的sockets:
socket.set('transports', ['websocket']);
最好的祝福。
IIS和Node需要一起工作才能打开websocket。 您将需要编辑web.config文件以及在控制台中启用。
Scott Hanselman撰写了一篇关于如何在socket.io中启用Azure中的websockets的博文
http://www.hanselman.com/blog/EnablingWebsocketsForSocketioNodeAppsOnMicrosoftAzure.aspx