nestjs 使用 socket.io
时间: 2024-09-13 19:00:44 浏览: 72
NestJS 是一个用于构建高效、可靠和可扩展的服务器端应用程序的框架。它使用 TypeScript(也可以转译为 JavaScript)编写,并结合了 OOP(面向对象编程)、FP(函数式编程)和 FRP(函数响应式编程)的元素。
Socket.IO 是一个用于实时、双向和基于事件的通信的库。它可以轻松地在浏览器和服务器之间实现实时通信。在 NestJS 中使用 Socket.IO,可以让你构建出支持实时功能的应用程序,如聊天应用、实时游戏、实时通知等。
要在 NestJS 中使用 Socket.IO,通常需要做以下几个步骤:
1. 安装 Socket.IO 相关的依赖包:
```
npm install @nestjs/websockets @nestjs/adapter-socket.io
```
2. 创建一个 Socket 模块,它将负责所有的 WebSocket 相关逻辑。你可以使用 `@WebSocketModule` 装饰器来标记这个模块。
3. 配置 Socket.IO 适配器,并将其与你的 NestJS 应用程序关联起来。
4. 在你的服务中,使用装饰器如 `@WebSocket()` 来定义 WebSocket 控制器,使用 `@MessagePattern()` 来定义处理不同事件的方法。
5. 使用 `@EventPattern()` 装饰器来监听特定的事件,并且可以使用 `@Emit()` 装饰器来向客户端发射事件。
下面是一个简单的示例代码:
```typescript
// socket.module.ts
import { Module } from '@nestjs/common';
import { WebsocketsModule } from '@nestjs/websockets';
import { SocketIoModule } from '@nestjs/adapter-socket.io';
import { MySocketController } from './my-socket.controller';
@Module({
imports: [
WebsocketsModule,
SocketIoModule.register(), // 使用默认配置注册 Socket.IO
],
controllers: [MySocketController],
})
export class SocketModule {}
```
```typescript
// my-socket.controller.ts
import { Controller, SubscribeMessage, MessageBody } from '@nestjs/common';
import { Socket, MessageEvent } from 'socket.io';
@Controller('socket')
export class MySocketController {
@SubscribeMessage('news')
handleNews(@MessageBody() message: string, @Socket() socket: Socket): void {
socket.emit('news', message);
}
}
```
在这个示例中,我们创建了一个名为 `MySocketController` 的控制器,它监听名为 'news' 的事件,并将接收到的消息回显给发送者。
阅读全文