【问题标题】:Websockets with Socket.io Node apps on Microsoft AzureMicrosoft Azure 上带有 Socket.io 节点应用程序的 Websockets
【发布时间】:2018-05-07 16:24:30
【问题描述】:

我们有一个与 websocket 协议(WebRTC、socket.io)通信的 Nodejs 服务器。

在我们开发 Heroku 期间,我们没有遇到任何特殊问题。 但是,我们在 Azure 上部署应用时遇到了问题:

  • 客户端/服务器通信不稳定,分析后发现websocket通信失败,使用的传输协议是'polling':

websocket.js:112 WebSocket 连接到 'wss://hote.fr/socket.io/?EIO=3&transport=websocket&sid=EgjKLAtp89wrBKMzAAAG' 失败:WebSocket 握手期间出错:意外的响应代码: 503

  • 当您在管理中激活“Websocket”功能时,网站变得更加不稳定并且非常长并且无法通信。这个函数没有解决websocket通信的问题。 Example

在通知我们后,我们确实在 web.config 中禁用了 websocket,但没有更改。

请注意,使用相同的代码,在 heroku 下一切正常,使用的协议是 websocket。 有没有人遇到过这个问题,并有解决方案?

对不起我的英语。

提前感谢您的宝贵时间。

【问题讨论】:

    标签: node.js sockets azure websocket server


    【解决方案1】:

    尝试 Aaron 提出的建议来缩小问题范围,我想强调 Azure 沙盒的一些限制,以帮助进一步隔离问题:

    1.在应用服务中,对每个虚拟机实例可以建立的最大出站连接数实施限制。 正如文档中提到的Cross-VM numerical limits

    “这些限制仅适用于基本或更高计划的客户;换句话说,客户在自己的专用虚拟机上运行。这些限制是为了保护整个 VM,即使某个特定站点可能存在上述限制。限制因配置的 VM 大小而异。”

    1. 如果您尝试从应用程序访问本地地址,也可能会发生此错误。 正如文档中提到的Local address requests

    “到本地地址(例如 localhost、127.0.0.1)和机器自身 IP 的连接尝试将失败,除非同一沙箱中的另一个进程在目标端口上创建了侦听套接字。 被拒绝的连接尝试,例如以下尝试从 .NET 连接到 127.0.0.1:80 的示例将导致以下异常: 异常详细信息:System.Net.Sockets.SocketException:尝试以访问权限 127.0.0.1:80 禁止的方式访问套接字。”

    3.有关您的网络应用程序中的出站连接的更多信息,请参阅有关 outgoing connections to Azure websites 的博客文章。

    【讨论】:

      【解决方案2】:

      您需要执行以下操作才能使其在 Azure 应用服务上运行。

      1. 通过Azure portal 启用Web 套接字

      1. 禁用 IIS WebSocket 模块以允许 Node.js 提供自己的 通过将此添加到您的 web.config 文件中来实现 WebSocket:

        <webSocket enabled="false" />
        
      2. 告诉 Socket.IO 只使用 WebSocket 而不是几个 XHR 请求,方法是将其添加到 Node.js 服务器:

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

        然后在客户端添加这个:

        var socket = io({transports: ['websocket']});
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-24
        • 2017-07-23
        • 2011-12-27
        • 1970-01-01
        • 1970-01-01
        • 2012-01-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多