我在其配置面板中启用了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作为传输。
答案 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