前言
第一次使用nodejs实现服务端功能,在用midway框架过程中由于对nodejs和midway不熟悉,遇到了websocket不知道如何在全局调用的问题,后面请教了其他人了解到解决方法
解决方法:需要将ws实例在保存单例模式下,这样作用域就变成全局作用域
import { Provide, Scope, ScopeEnum } from '@midwayjs/decorator';
import { Context } from '@midwayjs/ws';
@Provide()
@Scope(ScopeEnum.Singleton)
export class SocketService {
socketMap;
constructor() {
this.socketMap = new Map();
}
addSocket(id: string, socket: Context) {
this.socketMap.set(id, socket);
}
getSocket(): Iterable<Context> {
return this.socketMap.values();
}
removeSocket(id: string) {
this.socketMap.delete(id);
}
async sendInfo(message) {
for (const ws of this.getSocket()) {
ws.send(JSON.stringify(message));
}
}
}
|