无法在所有客户端 angular/nestjs 套接字 io 中接收数据

Posted

技术标签:

【中文标题】无法在所有客户端 angular/nestjs 套接字 io 中接收数据【英文标题】:cant receive data in all clients angular / nest js scoket io 【发布时间】:2020-12-23 04:29:16 【问题描述】:

我正在尝试在一个小项目中使用 socket io,所以我使用 angularnestjs 但我只在发送数据的同一客户端接收数据

其他客户端不会在每条消息后重新加载他们的组件,我认为问题出在客户端,但我无法弄清楚

nestjs

implements OnGatewayDisconnect, OnGatewayConnection 
  private logger: Logger = new Logger('AppGateway');
  constructor() 
  handleConnection(client: Socket) 
    this.logger.log(`client Connected $client.id`);
  
  handleDisconnect(client: Socket) 
    this.logger.log(`client disconnected $client.id`);
  
  @SubscribeMessage('chat')
  handleMessage(client: Socket, data: any) 
    client.emit('chat', data);
  
  @SubscribeMessage('typing')
  handleMessage2(client: Socket, data: any) 
    client.emit('typing', data);
  


角度服务

export class MessageService 
  socket: any;

  constructor() 
    this.socket = io.connect('http://localhost:3000');
  

  listen(eventname: string): Observable<any> 
    return new Observable((subscriber) => 
      this.socket.on(eventname, (data) => 
        subscriber.next(data);
      );
    );
  

  emit(eventname: string, data: any) 
    this.socket.emit(eventname, data);
  


角度组件.ts

 ngOnInit(): void 
   
    this.messageService
      .listen('typing')
      .subscribe((data) => this.updateFeedback(data));
    this.messageService
      .listen('chat')
      .subscribe((data) => this.updateMessage(data));
   
  
 updateMessage(data: any) 
    this.feedback = '';
    if (!!!data) return;
    console.log(`$data.handle : $data.message`);
    this.output.push(data);
  

  updateFeedback(data: any) 
    this.feedback = `$data is typing a message`;
  

【问题讨论】:

【参考方案1】:

更新:问题是当您将数据发送到您需要的客户端时,我使用了 client.emit 并且客户端是一个套接字。 所以我尝试使用这段代码,它运行良好

@WebSocketServer() server: Server;
  @SubscribeMessage('chat')
  handleMessage(client: Socket, data: any) 
    this.msg = data;
    this.server.emit('chat', data);
    return 'hello';
  

【讨论】:

以上是关于无法在所有客户端 angular/nestjs 套接字 io 中接收数据的主要内容,如果未能解决你的问题,请参考以下文章

如何将所有路由重定向到nest.js中的index.html(Angular)?

nestjs 单元测试 createTestingModule 依赖注入

开发版速达-提供在线帐套配置功能

金蝶k3无法建立数据连接

用友U8帐套引入时出现运行时错误“-2147217803(80040e75)”[SQL server]无法分离数据库,因为当前正在使

在金蝶K3建立帐套时报错 无法创建数据库!错误描述:错误5来自CreateProcess(第737行)