【问题标题】:Socket.IO not working correctly on Azure App Service With Multiple InstancesSocket.IO 在具有多个实例的 Azure 应用服务上无法正常工作
【发布时间】:2022-02-02 17:42:14
【问题描述】:

我运行一个在 NodeJS 和 React 中构建的聊天门户,该门户托管在 Azure 应用服务上。最近,随着越来越多的人使用它,Microsoft 指示我们扩展应用程序,本质上是为其提供更多实例。

虽然这确实解决了性能问题,但门户的 Socket.IO 组件随后会按预期停止工作。它似乎只偶尔从 Socket.IO 接收 ping,这导致数据在需要时不刷新。我在应用服务上启用了 Websockets 和 ARR Affinity,禁用 ARR Affinity 完全破坏了 Socket.io 功能。我是使用 Socket.IO 在多个实例上运行 NodeJS 的新手,因此我希望社区提供有关如何解决此问题的任何反馈。

Socket.IO配置如下:

服务器索引.js

const server = require('http').createServer(app);
const io = require('socket.io')(server);

app.io = io;

客户端

import { io } from "socket.io-client";

const socket = io(null, {
    reconnectionDelayMax: 3000,
    reconnection: true,
    reconnectionAttempts: Number.MAX_VALUE,
    timeout: 7000
});

export default socket;

【问题讨论】:

    标签: node.js azure websocket socket.io azure-web-app-service


    【解决方案1】:

    根据Socket IO documentation,您使用的语法正确,版本为3.x

    // ES6 import or TypeScript  
    import { io } from "socket.io-client";  
    // CommonJS  
    const io = require("socket.io-client");  
    

    尝试以旧方式在客户端使用SocketIO,首先通过以下方式导入:

    import * as io from 'socket.io-client';  
    

    然后,可能在构造函数中,建立到运行 SocketIO 服务器的服务器 IP 和端口的连接。

    这里是import * as io,这意味着您要导入整个模块 - 一个包含默认和命名导出成员的对象,并且您希望将此对象称为io

    更多信息请参考Link1 & Link2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-21
      • 1970-01-01
      • 1970-01-01
      • 2012-12-03
      • 1970-01-01
      • 2016-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多