从NestJS控制器或服务发出WebSocket事件

tyg4sfes  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(153)

我试图通过订阅者监听TypeORM中的模型更改事件,并在每次插入新事件时广播事件。当外部客户端接收到事件时,网关的@SubscribeMessage()方法没有接收到它,这表明发送方没有接收到事件。然而,根据socket.ioof('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);
  }

}
bxjv4tth

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);});

相关问题