1. 程式人生 > 其它 >nestjs-websocket 實現簡單的聊天室

nestjs-websocket 實現簡單的聊天室

https://www.passerma.com/chat/

程式碼地址https://github.com/passerma/nestjs-websocket

websocket部分程式碼如下

import {
  OnGatewayConnection, OnGatewayInit, SubscribeMessage, WebSocketGateway, OnGatewayDisconnect, WebSocketServer
} from '@nestjs/websockets';
import { Server, Socket } from 'socket.io';
import { Logger } from 
'@nestjs/common'; @WebSocketGateway({ path: '/socket', allowEIO3: true, cors: { origin: /.*/, credentials: true } }) export class AppGateway implements OnGatewayInit, OnGatewayConnection, OnGatewayDisconnect { private logger: Logger = new Logger('ChatGateway'); @WebSocketServer() private ws: Server;
// socket例項 private connectCounts = 0 // 當前線上人數 private allNum = 0 // 全部線上人數 private users: any = {} // 人數資訊 /** * 初始化 */ afterInit() { this.logger.log('websocket init ...'); } /** * 連結成功 */ handleConnection(client: Socket) {
this.connectCounts += 1 this.allNum += 1 this.users[client.id] = `user-${this.connectCounts}` this.ws.emit('enter', { name: this.users[client.id], allNum: this.allNum, connectCounts: this.connectCounts }); client.emit('enterName', this.users[client.id]); } /** * 斷開連結 */ handleDisconnect(client: Socket) { this.allNum -= 1 this.ws.emit('leave', { name: this.users[client.id], allNum: this.allNum, connectCounts: this.connectCounts }); } @SubscribeMessage('message') /** * 監聽傳送訊息 */ handleMessage(client: Socket, data: any): void { this.ws.emit('message', { name: this.users[client.id], say: data }); } @SubscribeMessage('name') /** * 監聽修改名稱 */ handleName(client: Socket, data: any): void { this.users[client.id] = data client.emit('name', this.users[client.id]); } }