我试图通过订阅者监听TypeORM中的模型更改事件,并在每次插入新事件时广播事件。当外部客户端接收到事件时,网关的@SubscribeMessage()
方法没有接收到它,这表明发送方没有接收到事件。然而,根据socket.io,of('namespace').emit('event')
应该被接收到任何客户端,包括发送方。
网关被注入到订阅服务中,没有任何问题,当我尝试使用它时,网关的服务器似乎已经准备好了,但没有发出任何事件。
在NestJS 6.3.1上运行,我也尝试从控制器发出事件,没有结果。
@WebSocketGateway({ namespace: '/posts' })
export class PostGateway {
@WebSocketServer()
server: Namespace;
@SubscribeMessage('create')
handleMessage(client: Socket, payload: Post): void {
console.log('handling', payload);
}
}
@Injectable()
export class PostSubscriber implements EntitySubscriberInterface<Post> {
private socket: Namespace;
constructor(
@InjectConnection() readonly connection: Connection,
private readonly gateway: PostGateway,
) {
connection.subscribers.push(this);
this.socket = gateway.server;
}
listenTo() {
return Measurement;
}
afterInsert(event: InsertEvent<Post>): void {
this.gateway.server.emit('create', event.entity);
}
}
1条答案
按热度按时间bxjv4tth1#
我真的不确定你的代码中有什么问题。但我可以给予一些东西来检查。以下是一些建议:
1.确保PostGateway已连接,并且其服务器已正确初始化。
1.检查空间连接
if (!this.socket) { console.error('Socket is not initialized!'); }
1.检查主模块中的网关故障
1.发射事件
1.检查客户端是否正确连接到指定的命名空间(/posts)并订阅“create”事件。
socket.on('create',(data)=> { console.log('Received create event:',data);});