socket.io transport在azure上是'polling'而不是'websocket'

时间:2015-09-02 08:35:25

标签: node.js azure websocket socket.io transport

我在其配置面板中启用了azure网站和websockets的标准计划。我使用socket.io和node.js.客户端和服务器都使用“轮询”作为其传输而不是websocket。在服务器上我有这些行,他们输出'polling'。

setInterval(function(){
   console.log(socket.conn.transport.name);
}, 2000);

在localhost上使用的传输是websocket。 我已经尝试过在其他帖子中提出的建议,比如这个: Socket.io connection reverts to polling, never fires the 'connection' handler,但他们确实解决了这个问题。

有没有办法让azure工作使用websocket作为传输。

2 个答案:

答案 0 :(得分:2)

有一个官方教程文档可帮助在Azure上使用socket.io和wobsocket构建NodeJS Webapps。您的问题已在文档https://azure.microsoft.com/en-us/documentation/articles/web-sites-nodejs-chat-app-socketio/#troubleshooting的“故障排除”部分得到解答。

为了让Socket.IO使用WebSockets作为消息传输,服务器和客户端都必须支持WebSockets。如果其中一个没有,Socket.IO将协商另一个传输,例如长轮询。 Socket.IO使用的默认传输列表是websocket,htmlfile,xhr-polling,jsonp-polling。您可以通过将以下代码添加到app.js文件来强制它仅使用WebSockets。

对于app.js的globol范围:

io.set('transports', ['websocket']);

或者对于连接的套接字:

socket.set('transports', ['websocket']);

最诚挚的问候。

答案 1 :(得分:0)

IIS和Node需要协同工作才能打开websockets。您需要编辑web.config文件以及在控制台中启用。

Scott Hanselman有一篇关于如何使用socket.io

在Azure中启用websockets的博客文章

http://www.hanselman.com/blog/EnablingWebsocketsForSocketioNodeAppsOnMicrosoftAzure.aspx