Nestjs网关websocket作为客户端

Nestjs网关websocket作为客户端,websocket,socket.io,nestjs,Websocket,Socket.io,Nestjs,如何在nestjs中创建到web套接字服务器的客户端连接 例如:有一个web套接字或socket.io服务器,它每秒向其所有客户端发送一条消息 如何在nestjs中正确连接到此服务器并侦听来自它的消息事件。我是否必须为我的WebSocketGateway创建一个特殊适配器才能成为客户机? 有可能让Websotsketgateva成为客户吗?如果没有,正确的方法是什么?我可以建议你两种方法 1:创建实现WebSocketAdapter的适配器。然后可以使用@SocketGateway和@Subsc

如何在nestjs中创建到web套接字服务器的客户端连接

例如:有一个web套接字或socket.io服务器,它每秒向其所有客户端发送一条消息

如何在nestjs中正确连接到此服务器并侦听来自它的消息事件。我是否必须为我的WebSocketGateway创建一个特殊适配器才能成为客户机?
有可能让Websotsketgateva成为客户吗?如果没有,正确的方法是什么?

我可以建议你两种方法

1:创建实现WebSocketAdapter的适配器。然后可以使用@SocketGateway和@SubscribeMessage。您可以在以下网址阅读更多内容:

2:在ApplicationBootstrap上创建一个提供程序实现。在此提供程序中,安装套接字客户端,并将事件从它激发到EventEmitter


@Injectable()
export class IoClientGatewayBootstrap implements OnApplicationBootstrap {
  @Inject(IoClient)
  private ioClient: IoClient;
  @Inject(GLOBAL_PROVIDER.LOCAL_EVENT_EMITOR)
  private localEventEmitor: LocalEventEmitorInterface;

  onApplicationBootstrap() {
    console.log('run');

    this.connect();
  }

  connect = () => {
    const connection = io(AppConfig.SOCKET_SERVER_URL);

    connection.on('connect', () => {
      console.log('ok connect');
    });

    connection.on('disconnect', (reason) => {
      console.log('disconnect', reason);
    });

    // swap socket event to local event
    connection.onAny((eventName: string, ...args) => {
      console.log(eventName);
      this.localEventEmitor.emit(eventName, args);
    });

    this.ioClient.setIoClient(connection);
  };
}

其中LocalEventEmitter是一个服务实现EventEmitter2()

现在,您可以在任何模块中将套接字事件作为本地事件侦听

 @OnEvent('test-my-event')
  handleEvent(event: unknown) {
    console.log(event);
  }
 @OnEvent('test-my-event')
  handleEvent(event: unknown) {
    console.log(event);
  }