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