Nodejs Nestjs实时通信插件@nestjs/platform-socket.io的使用

Nodejs Nestjs实时通信插件@nestjs/platform-socket.io的使用
@nestjs/platform-socket.io 是一个用于 NestJS 的库,它允许你轻松地集成 Socket.IO 进行实时通信。下面是一个简单的示例,演示如何在 NestJS 应用程序中设置和使用 @nestjs/platform-socket.io

1. 安装必要的依赖

首先,你需要安装 @nestjs/platform-socket.iosocket.io

npm install @nestjs/platform-socket.io socket.io

2. 创建一个 Socket.IO 模块

接下来,创建一个新的模块来处理 Socket.IO 逻辑。例如,创建一个名为 chat.module.ts 的文件:

import { Module } from '@nestjs/common';
import { ChatGateway } from './chat.gateway';

@Module({
  providers: [ChatGateway],
})
export class ChatModule {}

3. 创建一个 Gateway

接着,创建一个 Gateway 类来处理连接、断开连接和消息传递。例如,创建一个名为 chat.gateway.ts 的文件:

import { OnGatewayConnection, OnGatewayDisconnect, WebSocketGateway, WebSocketServer } from '@nestjs/websockets';
import { Server, Socket } from 'socket.io';

@WebSocketGateway()
export class ChatGateway implements OnGatewayConnection, OnGatewayDisconnect {
  @WebSocketServer() server: Server;

  handleConnection(client: Socket) {
    console.log(`Client connected: ${client.id}`);
  }

  handleDisconnect(client: Socket) {
    console.log(`Client disconnected: ${client.id}`);
  }

  sendMessage(message: string) {
    this.server.emit('message', message);
  }
}

4. 配置 AppModule

最后,在主模块中引入 ChatModule 并启用 Socket.IO。例如,修改 app.module.ts 文件:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ChatModule } from './chat/chat.module';
import { NestFactory } from '@nestjs/core';
import { HttpAdapterHost } from '@nestjs/core';

@Module({
  imports: [ChatModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {
  static async bootstrap() {
    const app = await NestFactory.create(AppModule);
    await app.listen(3000);
  }
}

5. 启动应用

现在你可以启动你的 NestJS 应用,并开始使用 Socket.IO 进行实时通信了。

npm run start

6. 客户端连接

在客户端(例如,浏览器中的 JavaScript),你可以使用以下代码连接到 Socket.IO 服务器并接收消息:

const socket = io('http://localhost:3000');

socket.on('connect', () => {
  console.log('Connected to server');
});

socket.on('message', (data) => {
  console.log('Message received:', data);
});

通过以上步骤,你就可以在 NestJS 应用中使用 @nestjs/platform-socket.io 来实现实时通信功能了。


3 回复

当然,要让NestJS项目支持实时通信,我们可以使用@nestjs/platform-socket.io插件。首先,确保安装了Socket.IO相关的依赖:

npm install @nestjs/platform-socket.io socket.io

接着,在你的模块文件(比如app.module.ts)中导入SocketModule:

import { Module } from '@nestjs/common';
import { SocketIoModule } from '@nestjs/platform-socket.io';

@Module({
  imports: [
    SocketIoModule.forRoot({ /* 这里可以配置Socket.IO */ }),
  ],
})
export class AppModule {}

然后,在你的控制器中创建一个Socket处理逻辑:

import { Controller, Get, OnModuleInit } from '@nestjs/common';
import { Server, Socket } from 'socket.io';

@Controller()
export class AppController implements OnModuleInit {
  private server: Server;

  constructor() {}

  onModuleInit() {
    this.server = new Server();
  }

  @Get('emit')
  emitEvent() {
    this.server.emit('test-event', { message: 'Hello, world!' });
  }
}

这样,当你访问/emit路由时,就会向所有连接的客户端广播一个事件。希望这能帮到你,享受编程的乐趣吧!


@nestjs/platform-socket.io 是 NestJS 框架中用于处理 WebSocket 通信的一个强大工具。它基于 Socket.IO 库构建,使得在 NestJS 应用程序中实现实时通信变得非常简单。下面我将介绍如何设置和使用这个库。

安装依赖

首先,你需要安装必要的依赖包:

npm install @nestjs/platform-socket.io socket.io

设置 Socket.IO

在你的 NestJS 应用程序中,通常是在 app.module.ts 文件中配置 Socket.IO。以下是一个基本的示例:

import { Module, NestModule, MiddlewareConsumer, RequestMethod } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { Server } from 'socket.io';
import { AppModule } from './app.module';

@Module({
  // 模块声明
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    const server = NestFactory.create(AppModule).listen(3000);

    const io = new Server(server, {
      cors: {
        origin: '*',
      },
    });

    io.on('connection', (socket) => {
      console.log('a user connected');
      
      socket.on('disconnect', () => {
        console.log('user disconnected');
      });
      
      socket.on('chat message', (msg) => {
        console.log('message: ' + msg);
        io.emit('chat message', msg); // 将消息广播给所有客户端
      });
    });
  }
}

创建一个 WebSocket 控制器

你可以创建一个控制器来处理特定的 WebSocket 事件。例如,你可以创建一个 ChatGateway

import { WebSocketGateway, WebSocketServer } from '@nestjs/websockets';
import { Server } from 'socket.io';

@WebSocketGateway()
export class ChatGateway {
  @WebSocketServer() server: Server;

  handleConnection(client: any, ...args: any[]) {
    console.log(`Client connected: ${client.id}`);
  }

  handleDisconnect(client: any) {
    console.log(`Client disconnected: ${client.id}`);
  }

  handleChatMessage(client: any, data: any) {
    console.log(`Message from client ${client.id}: ${data.message}`);
    this.server.emit('chat message', data.message);
  }
}

配置路由

最后,确保在你的模块中注册这个 Gateway:

import { Module } from '@nestjs/common';
import { ChatGateway } from './chat.gateway';

@Module({
  providers: [ChatGateway],
})
export class AppModule {}

这样,你就完成了基本的 WebSocket 服务配置,并可以开始发送和接收消息了。通过这种方式,你可以在 NestJS 应用中轻松地添加实时通信功能。

@nestjs/platform-socket.io 是 NestJS 中用于实现 WebSocket 实时通信的插件。首先,安装必要的依赖:

npm install @nestjs/platform-socket-io socket.io

然后,在模块中导入 WsModule

import { WsModule } from '@nestjs/platform-socket.io';

@Module({
  imports: [WsModule],
})
export class ApplicationModule {}

定义一个 WebSocket 服务来处理连接和消息:

@Injectable()
export class ChatGateway {
  @WebSocketServer() server;

  handleConnection(client) {
    console.log('Client connected:', client.id);
  }

  handleDisconnect(client) {
    console.log('Client disconnected:', client.id);
  }

  handleMessage(client, message) {
    console.log('Message received:', message);
    this.server.emit('response', `Hello, ${message}`);
  }
}

最后,在模块中声明该服务:

import { ChatGateway } from './chat.gateway';

@Module({
  providers: [ChatGateway],
})
export class AppModule {}

这样,你就实现了基本的 WebSocket 实时通信功能。

回到顶部