fixed bug

This commit is contained in:
AmirHossein Mahmoodi
2025-05-05 09:20:01 +03:30
parent 851758be6b
commit 266169c524
7 changed files with 185 additions and 13 deletions

View File

@@ -1,7 +1,7 @@
import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';
import { IoAdapter } from '@nestjs/platform-socket.io';
import { RedisIoAdapter } from './socket-redis.adapter';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
@@ -10,7 +10,9 @@ async function bootstrap() {
credentials: true,
});
app.useGlobalPipes(new ValidationPipe());
app.useWebSocketAdapter(new IoAdapter(app));
await app.listen(parseInt(process.env.PORT));
const redisAdapter = new RedisIoAdapter(app);
await redisAdapter.connectToRedis();
app.useWebSocketAdapter(redisAdapter);
await app.listen(parseInt(process.env.PORT), '0.0.0.0');
}
bootstrap();

View File

@@ -0,0 +1,25 @@
import { IoAdapter } from '@nestjs/platform-socket.io';
import { ServerOptions } from 'socket.io';
import { createAdapter } from '@socket.io/redis-adapter';
import { createClient } from 'redis';
export class RedisIoAdapter extends IoAdapter {
private adapterConstructor: ReturnType<typeof createAdapter>;
async connectToRedis(): Promise<void> {
const pubClient = createClient({
url: `redis://${process.env.REDIS_HOST}:${process.env.REDIS_PORT}`,
});
const subClient = pubClient.duplicate();
await Promise.all([pubClient.connect(), subClient.connect()]);
this.adapterConstructor = createAdapter(pubClient, subClient);
}
createIOServer(port: number, options?: ServerOptions) {
const server = super.createIOServer(port, options);
server.adapter(this.adapterConstructor);
return server;
}
}

View File

@@ -7,20 +7,25 @@ import {
import { Server, Socket } from 'socket.io';
import { SendMessageDto } from './dto/sendMessage.dto';
import { SocketService } from './socket.service';
import { Logger } from '@nestjs/common';
@WebSocketGateway({
namespace: 'notification',
cors: {
origin: '*',
},
path: '/notification/socket.io',
})
export class SocketGateway implements OnGatewayConnection {
private readonly logger = new Logger(SocketGateway.name);
@WebSocketServer()
server: Server;
constructor(private socketService: SocketService) {}
async handleConnection(client: Socket) {
this.logger.log(`Client connected: ${client.id}`);
await this.socketService.clientConnection({
client_id: client.handshake.auth.token,
socket_id: client.id,