首页 > 解决方案 > 如何从 @EventPattern 访问 Websocket

问题描述

我有一个events.gateway.ts控制所有客户端和服务器事件,但是当我这样做时 this.server.emit('client.events', data)@EventPattern('gw-event:playback.state')我有发射null。请看下面的代码:

import { Logger, Inject, Controller } from '@nestjs/common';
import { SubscribeMessage, 
  WebSocketGateway, 
  MessageBody, 
  WebSocketServer,
  OnGatewayInit,
  OnGatewayConnection,
  OnGatewayDisconnect} from '@nestjs/websockets';
import { Socket, Server  } from 'socket.io';
import { ClientProxy, EventPattern} from '@nestjs/microservices';

@Controller('gateway')
@WebSocketGateway()
export class EventsGateway implements OnGatewayInit, OnGatewayConnection, OnGatewayDisconnect{


  @WebSocketServer() server: Server;
  private logger: Logger = new Logger('EventsGateway');

  constructor(@Inject('EVENTS_SERVICE') private readonly client: ClientProxy) {
  }

  afterInit(server: Server) {
    this.server = server;
    this.logger.log('Init', EventsGateway.name);
  }// OnGatewayInit

  handleDisconnect(client: Socket) {
    this.logger.log(`Client disconnected: ${client.id}`, EventsGateway.name);
  }// OnGatewayDisconnect

  handleConnection(client: Socket, ...args: any[]) {
    this.logger.log(`Client connected: ${client.id}`, EventsGateway.name);
    this.server.emit('client.events', 'Welcome client:' + client.id);
  }// OnGatewayConnection

  @SubscribeMessage('client.events')
  handleEvent(@MessageBody() data: string): any {
    return { event: 'client.events', 'data': data + '__from Server'};
  }

  @EventPattern('gw-event:playback.state') 
  async handlePlaybackState(data: Record<string, unknown>) {
    this.server.emit('client.events', data); //<= Error emit is null
  }

}

有什么建议吗?谢谢。

标签: websocketsocket.ionestjs

解决方案


解决了在如何从控制器或其他组件/服务访问 websocket 中应用建议的方法?通过拉罗德


推荐阅读