如何在NestJS中使用Socket.IO
时间: 2024-09-12 11:14:13 浏览: 70
NestJS 是一个用于构建高效、可靠和可扩展的服务器端应用程序的框架。它使用 TypeScript 编写,并且完全支持 ES6+;同时通过渐进式学习曲线,允许开发者轻松地使用现有的 Node.js 库。Socket.IO 是一个用于实时、双向和基于事件的通信库,它非常适合构建实时应用程序,如聊天室、游戏、实时通知等。
要在 NestJS 中使用 Socket.IO,您需要安装 `@nestjs/platform-socket.io` 包,这个包提供了与 Socket.IO 集成的模块和守卫。以下是在 NestJS 中集成 Socket.IO 的基本步骤:
1. 安装必要的包:
```bash
npm install @nestjs/platform-socket.io socket.io
```
2. 创建 Socket.IO 模块:
在 NestJS 中,您可以创建一个模块来封装 Socket.IO 功能。例如,创建一个 `socket` 文件夹并在此文件夹内创建一个 `socket.module.ts` 文件:
```typescript
import { Module } from '@nestjs/common';
import { IOAdapter, IOModule } from '@nestjs/platform-socket.io';
@Module({
imports: [
IOModule.forRoot({
cors: {
origin: 'http://localhost:3000', // 允许跨域请求的源地址
credentials: true,
},
}),
],
providers: [],
exports: [IOModule],
})
export class SocketModule {}
```
上述代码中,`forRoot` 配置了 Socket.IO 的基本选项,如跨域设置等。
3. 创建 Socket.IO 控制器:
创建一个控制器来处理不同的 Socket.IO 事件,例如连接、断开连接以及自定义事件。在 `socket` 文件夹中创建一个 `socket.controller.ts` 文件:
```typescript
import { Controller, OnModuleInit, OnModuleDestroy, OnDestroy } from '@nestjs/common';
import { Server } from 'socket.io';
@Controller()
export class SocketController implements OnModuleInit, OnModuleDestroy, OnDestroy {
private io: Server;
constructor(private readonly server: Server) {}
onModuleInit() {
this.io = this.server.getInstance();
this.io.on('connection', (socket) => {
console.log('a user connected');
socket.on('chat message', (msg) => {
this.io.emit('chat message', msg);
});
socket.on('disconnect', () => {
console.log('user disconnected');
});
});
}
onModuleDestroy() {
this.io.close();
}
ngOnDestroy() {
this.io.close();
}
}
```
在上述代码中,我们监听了 `connection` 事件来跟踪用户何时连接,也监听了 `disconnect` 事件来跟踪用户何时断开连接。
4. 在根模块中注册 Socket 模块:
修改或创建您的根模块(例如 `AppModule`),并引入 Socket 模块:
```typescript
import { Module } from '@nestjs/common';
import { SocketModule } from './socket/socket.module';
@Module({
imports: [SocketModule],
// ... 其他模块依赖
})
export class AppModule {}
```
以上就是在 NestJS 中使用 Socket.IO 的基本步骤。当然,实际开发中可能需要根据具体需求进行更复杂的配置和编码。
阅读全文