[英]How to use PM2 Cluster with Socket IO?
我正在开发一个完全依赖 Socket.io 的应用程序。 众所周知,NodeJS 默认只在一个内核上运行。 现在我想跨多个内核扩展它。 我发现很难让 socketio 与 PM2 集群模式一起工作。 任何示例代码都会有所帮助。
我正在使用 Artillery 进行测试。 当应用程序在单核上运行时,我得到响应,而它在集群中运行时,响应将为 NaN
我正在开发一个完全依赖Socket.io的应用程序。 众所周知,NodeJS默认仅在一个内核上运行。 现在,我想将其扩展到多个核心。 我发现很难使socketio与PM2群集模式一起使用。 任何示例代码都会有所帮助。
我正在使用炮兵进行测试。 当应用程序在单核上运行时,我会收到响应,而在集群中运行时,响应会是NaN
NESTjs服务器
我使用 Socket server 2.4.1 所以我得到了兼容的 redis 适配器 5.4.0
我需要扩展 nest 的高级类“ioAdapter”,该类只适用于普通的 ws 连接,而不适用于我们的 pm2 集群
import { IoAdapter } from '@nestjs/platform-socket.io';
import * as redisIOAdapter from 'socket.io-redis';
import { config } from './config';
export class RedisIoAdapter extends IoAdapter {
createIOServer(port: number, options?: any): any {
const server = super.createIOServer(port, options);
const redisAdapter = redisIOAdapter({
host: config.server.redisUrl,
port: config.server.redisPort,
});
server.adapter(redisAdapter);
return server;
}
}
那实际上是 nestjs 实现
现在我需要告诉 nest im 使用那个实现,所以我去 main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { config } from './config';
import { RedisIoAdapter } from './socket-io.adapter';
import { EventEmitter } from 'events';
async function bootstrap() {
EventEmitter.defaultMaxListeners = 15;
const app = await NestFactory.create(AppModule);
app.enableCors();
app.useWebSocketAdapter(new RedisIoAdapter(app));
await app.listen(config.server.port);
}
bootstrap();
我有很多关于这个的事件,所以我不得不增加我的最大事件数
现在对于你得到的每个网关,你需要使用不同的连接策略,所以你需要直接去 websocket 而不是使用轮询
...
@WebSocketGateway({ transports: ['websocket'] })
export class AppGateway implements OnGatewayConnection, OnGatewayDisconnect {
...
或者如果您使用命名空间
...
@WebSocketGateway({ transports: ['websocket'], namespace: 'user' })
export class UsersGateway {
...
最后一步是在您的 AWS 实例上安装 redis 数据库,这是另一回事; 并安装pm2
nest build
pm2 i -g pm2
pm2 start dist/main.js -i 4
客户
const config: SocketIoConfig = {
url: environment.server.admin_url, //http:localhost:3000
options: {
transports: ['websocket'],
},
};
您现在可以使用FireCamp测试您的 websocket 服务器
我正在开发一个完全依赖Socket.io的应用程序。 众所周知,NodeJS默认仅在一个内核上运行。 现在,我想将其扩展到多个核心。 我发现很难使socketio与PM2群集模式一起使用。 任何示例代码都会有所帮助。
我正在使用炮兵进行测试。 当应用程序在单核上运行时,我会收到响应,而在集群中运行时,响应会是NaN
我正在开发一个完全依赖Socket.io的应用程序。 众所周知,NodeJS默认仅在一个内核上运行。 现在,我想将其扩展到多个核心。 我发现很难使socketio与PM2群集模式一起使用。 任何示例代码都会有所帮助。
我正在使用炮兵进行测试。 当应用程序在单核上运行时,我会收到响应,而在集群中运行时,响应会是NaN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.