-
当需要及时通讯的时候,我们需要集成websocket
安装依赖npm install --save @nestjs/platform-ws @nestjs/websockets
-
建立websocket.gateway.ts
import { WebSocketGateway, WebSocketServer, SubscribeMessage, MessageBody, OnGatewayConnection, OnGatewayDisconnect, } from '@nestjs/websockets'; @WebSocketGateway() export class WebsocketsGateway implements OnGatewayConnection, OnGatewayDisconnect { handleDisconnect(client: any) { console.log('mmmmmllllllll', client); } handleConnection(client: any, ...args: any[]) { console.log('mmmmm', client); } @SubscribeMessage('message') handleMessage(@MessageBody() data: string): string { console.log('Received message from client:', data); // 会接收到web的send方法里面的data数据 return 'Hello from server'; } }
-
建立websocket.module.ts
import { Module } from '@nestjs/common'; import { WebsocketsGateway } from './websocket.gateway'; @Module({ providers: [WebsocketsGateway], }) export class WebsocketModule {}
4.app.module.ts 引用
@Module({
imports: [ WebsocketModule]
})
-
main.ts 引用ws
引入import { WsAdapter } from '@nestjs/platform-ws'; async function bootstrap() { const app = await NestFactory.create<NestExpressApplication>(AppModule, { cors: true, }); // websocket app.useWebSocketAdapter(new WsAdapter(app)); }
web端使用方法
var ws = new WebSocket("ws://localhost:3000");
//申请一个WebSocket对象,参数是服务端地址,同http协议使用http://开头一样,WebSocket协议的url使用ws://开头,另外安全的WebSocket协议使用wss://开头
ws.onopen = function (e) {
//当WebSocket创建成功时,触发onopen事件
console.log("websocket连接成功",e);
};
ws.onmessage = function (e) {
//当客户端收到服务端发来的消息时,触发onmessage事件,参数e.data包含server传递过来的数据
console.log("收到数据", e);
};
ws.onclose = function () {
//当客户端收到服务端发送的关闭连接请求时,触发onclose事件
console.log("websocket已断开");
};
ws.onerror = function (error) {
//如果出现连接、处理、接收、发送数据失败的时候触发onerror事件
console.log("websocket发生错误" + error);
};
setTimeout(() => {
const params = JSON.stringify({
event: 'message', // => message对应着nestjs的@SubscribeMessage
data: 'liping'
})
console.log(params)
ws.send(params); //将消息发送到服务端
// ws.send('{"event": "message", "data": "111111111" }')
}, 3000)