nestjs websocket 使用
时间: 2024-09-13 20:01:08 浏览: 17
NestJS 是一个用于构建高效、可靠和可扩展的服务器端应用程序的框架。它使用 TypeScript 编写(但也兼容纯 JavaScript),基于 Node.js 并且受到了 Angular 框架的影响。
在 NestJS 中使用 WebSocket,你可以利用其内置的 WebSocket 支持来创建实时通信功能。WebSocket 提供了一个持久的连接,使得服务器和客户端之间可以进行全双工通信。
以下是使用 NestJS WebSocket 的基本步骤:
1. **安装依赖**:确保你安装了 `@nestjs/websockets` 包,这个包提供了 WebSocket 的支持。
2. **创建 WebSocket 模块**:使用 NestJS 提供的 `@WebSocketModule` 装饰器来声明你的 WebSocket 模块。
3. **定义 WebSocket 端点**:通过使用 `@WebSocketGateway()` 装饰器来创建一个 WebSocket 网关,这个网关将作为客户端和服务器之间通信的中枢。
4. **处理消息和事件**:你可以使用 `@SubscribeMessage()` 装饰器来处理来自客户端的特定消息。同样,你也可以发射自定义事件到客户端,使用 `@MessagePattern()` 装饰器来处理这些事件。
5. **客户端连接**:客户端(通常是浏览器端)需要建立到你的 WebSocket 服务器的连接,并且根据你的 WebSocket 网关定义的规则发送和接收消息。
6. **管理连接和会话**:通过依赖注入,你可以访问一个 `WsResponse` 对象来管理客户端的连接,比如发送消息、关闭连接等。
下面是一个简单的例子来说明如何在 NestJS 中实现 WebSocket:
```typescript
// ws.gateway.ts
import { Injectable } from '@nestjs/common';
import { WebSocketGateway, SubscribeMessage, MessagePattern } from '@nestjs/websockets';
import { WsResponse } from '@nestjs/websockets';
@WebSocketGateway()
@Injectable()
export class WsGateway {
@SubscribeMessage('message')
handleClientMessage(data: any, client: WsResponse): void {
// 处理接收到的消息
client.emit('reply', { text: 'Message received' });
}
@MessagePattern('greeting')
greet(name: string): string {
// 返回给客户端的消息
return `Hello ${name}`;
}
}
```
在这个例子中,我们定义了一个 WebSocket 网关,它可以接收客户端发送的 `message` 事件,并相应地发送一个 `reply` 事件。同时,我们也定义了一个 `greeting` 消息模式,当客户端发送 `greeting` 消息时,服务器将回复一条问候消息。