专用 Express 和 Socket.IO 服务器

Dedicated Express and Socket.IO servers

我在同一端口上有一个使用 Expressjs 的 nodejs 网络应用程序和一个 SocketIO 服务器。 Web 应用程序具有注册、登录和仪表板页面。使用 Websocket,来宾或注册用户可以一起聊天。

const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
const { Server } = require("socket.io");

const io = new Server(server);

app.get('/', (req, res) => {
  //
});

app.get('/auth', (req, res) => {
  //
});

app.get('/dashboard', (req, res) => {
  //
});

io.on('connection', (socket) => {
  console.log('a user connected');
});

server.listen(3000, () => {
  console.log('listening on *:3000');
});

我应该将 web 和 socketio 作为独立项目分开吗?我很担心,因为 websocket 服务器 / socketio 稍后会被扩展。 Web 应用程序可能还需要缩放。

这种项目的最佳架构是什么?

我是初学者,不熟悉扩展 nodejs 应用程序,很抱歉我的问题。

Crisp为例

运行 HTTP 和 Socket.IO 服务器在同一个进程中,稍后当您想要水平扩展时引入负载平衡以将请求分发到服务器的多个实例。

对于多个实例,您还将有多个 Socket.IO 服务器,它们需要在彼此之间传递消息,以便事件可以到达客户端而不管它们连接到哪个实例,这通常由适配器处理使用 Redis 进行通信,请查看此处了解更多信息:https://socket.io/docs/v4/using-multiple-nodes/