nest.js websocket
时间: 2025-05-28 12:49:52 浏览: 20
### 使用 WebSocket 的 Nest.js 实现
Nest.js 提供了一个强大的框架来支持 WebSocket 集成,允许开发者轻松创建实时通信的应用程序。以下是关于如何在 Nest.js 中实现 WebSocket 功能的相关说明。
#### 安装依赖项
为了启用 WebSocket 支持,在项目中需要安装 `@nestjs/websockets` 和 `socket.io` 库作为主要依赖项[^4]。可以通过以下命令完成安装:
```bash
npm install --save @nestjs/websockets socket.io
```
如果希望使用 TypeScript 类型定义文件,则还需要额外安装类型声明包:
```bash
npm install --save-dev @types/socket.io
```
#### 创建 WebSocket Gateway
Nest.js 将 WebSocket 处理逻辑封装到称为 **Gateway** 的组件中。通过继承 `WebSocketGateway` 并装饰类中的方法为事件处理器,可以方便地管理客户端连接、断开以及消息传递等功能[^5]。
下面是一个简单的例子展示如何构建一个基本的聊天服务:
```typescript
import { WebSocketGateway, SubscribeMessage, MessageBody } from '@nestjs/websockets';
import { OnGatewayConnection, OnGatewayDisconnect } from '@nestjs/websockets';
@WebSocketGateway()
export class ChatGateway implements OnGatewayConnection, OnGatewayDisconnect {
handleConnection(client: any) {
console.log('Client connected:', client.id);
}
handleDisconnect(client: any) {
console.log('Client disconnected:', client.id);
}
@SubscribeMessage('sendMessage')
handleMessage(@MessageBody() message: string): void {
console.log(`Received message: ${message}`);
this.server.emit('newMessage', `Server received your message: ${message}`); // Broadcast to all clients.
}
}
```
在此示例中,当有新消息发送给服务器时会触发 `handleMessage()` 方法,并将接收到的消息广播回所有已连接的客户端。
#### 自定义配置选项
默认情况下,Socket.IO Server 被用来处理 WebSockets 请求。然而也可以自定义其行为参数比如端口号或者路径等设置[^6]:
```typescript
@WebSocketGateway({
namespace: 'chat',
cors: true,
})
export class CustomChatGateway {}
```
以上代码片段设置了特定命名空间 `/chat` 来区分不同类型的流量;同时启用了跨域资源共享(CORS),使得前端应用可以从其他域名访问 API 接口而不会遇到安全限制问题。
#### 测试与调试技巧
开发期间可能需要用到一些工具帮助验证功能是否正常运作。例如 Postman 插件并不完全适用于测试 WS 连接场景下交互过程,因此推荐采用专门针对此类需求设计的产品如 [SocketTest](https://github.com/cosmtrek/sockettest)[^7] 或者直接利用浏览器控制台运行 JavaScript 语句模拟真实环境下的操作流程。
```javascript
const socket = io('http://localhost:3000/chat');
socket.on('connect', () => {
console.log('Connected!');
});
socket.on('newMessage', data => {
console.log(data);
});
setTimeout(() => {
socket.send('Hello world.');
}, 1000);
```
阅读全文
相关推荐

















