【问题标题】:socket.io transport is 'polling' instead of 'websocket' on azure在 azure 上,socket.io 传输是“轮询”而不是“websocket”
【发布时间】:2015-11-27 16:14:00
【问题描述】:

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

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

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

有没有办法让天蓝色的工作使用 websocket 作为传输。

【问题讨论】:

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


    【解决方案1】:

    有一个官方教程文档可以帮助在 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 的全局范围:

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

    或者对于已连接的套接字:

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

    最好的问候。

    【讨论】:

      【解决方案2】:

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

      Scott Hanselman 有一篇很棒的博文,介绍了如何使用 socket.io 在 Azure 中启用 websockets

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

      【讨论】:

        猜你喜欢
        • 2014-12-23
        • 1970-01-01
        • 2021-11-21
        • 1970-01-01
        • 1970-01-01
        • 2012-05-25
        • 2015-09-04
        • 2012-02-06
        • 1970-01-01
        相关资源
        最近更新 更多