fixed bug
This commit is contained in:
10
src/main.ts
10
src/main.ts
@@ -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();
|
||||
|
||||
25
src/socket-redis.adapter.ts
Normal file
25
src/socket-redis.adapter.ts
Normal 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;
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user