迁移自托管 Socket.IO 应用以使其完全托管在 Azure 上

本文介绍如何使用 Web PubSub for Socket.IO 将 Socket.IO 聊天应用迁移到 Azure。

先决条件

创建 Web PubSub for Socket.IO 资源

  1. 转到 Azure 门户

  2. 搜索“socket.io”,然后选择“Web PubSub for Socket.IO”。

  3. 选择一个计划,然后选择“创建”。

    Screenshot of the Web PubSub for Socket.IO service in the Azure portal.

迁移应用

对于本指南中的迁移过程,你可以使用 Socket.IO 网站上提供的示例聊天应用。 需要对服务器端和客户端代码进行一些细微的更改才能完成迁移。

服务器端

  1. 在服务器端代码中找到 index.js

  2. 添加 @azure/web-pubsub-socket.io 包:

    npm install @azure/web-pubsub-socket.io
    
  3. 导入包:

    const { useAzureSocketIO } = require("@azure/web-pubsub-socket.io");
    
  4. 在服务器端代码中找到创建 Socket.IO 服务器的位置,并追加 useAzureSocketIO(...):

    const io = require("socket.io")();
    useAzureSocketIO(io, {
        hub: "eio_hub", // The hub name can be any valid string.
        connectionString: process.argv[2]
    });
    

    重要

    useAzureSocketIO 方法是异步的,它执行初始化步骤以连接到 Web PubSub。 可以使用 await useAzureSocketIO(...) 或使用 useAzureSocketIO(...).then(...) 来确保应用服务器在初始化成功后开始处理请求。

  5. 如果使用以下服务器 API,请在使用之前添加 async,因为这些 API 是与 Web PubSub for Socket.IO 异步执行的:

    例如,如果代码如下所示:

    io.on("connection", (socket) => { socket.join("room abc"); });
    

    请将其更新为:

    io.on("connection", async (socket) => { await socket.join("room abc"); });
    

    此聊天示例不使用上述任何 API。 因此你不需要进行任何更改。

客户端

  1. 在 Azure 门户上找到资源的终结点。

    Screenshot of getting the endpoint to a Web PubSub for Socket.IO resource.

  2. 在客户端代码中转到 ./public/main.js

  3. 找到创建 Socket.IO 客户端的位置。 将其终结点替换为 Azure 中的 Socket.IO 终结点,并添加 path 选项:

    const socket = io("<web-pubsub-for-socketio-endpoint>", {
        path: "/clients/socketio/hubs/eio_hub",
    });