Использование нескольких адаптеров сокетов с NestJS - PullRequest
0 голосов
/ 18 января 2019

Я работаю над приложением Node.js с NestJS. Мне нужно общаться с 2 другими приложениями.

Первый - через WebSockets (Socket.io), а второй - через TCP-сокеты с сетевым модулем.

Можно ли использовать два шлюза со специальными адаптерами, один на основе Socket.io, а другой на сетевом модуле, или мне нужно разделить это приложение?

1 Ответ

0 голосов
/ 05 апреля 2019

Вам не нужно разбивать приложение.

Вы можете определить свой модуль как:

@Module({
  providers: [
    MyGateway,
    MyService,
  ],
})
export class MyModule {}

при gateway, отвечающем за канал веб-сокетов

import { SubscribeMessage, WebSocketGateway } from '@nestjs/websockets'
import { Socket } from 'socket.io'
...
@WebSocketGateway()
export class MyGateway {
  constructor(private readonly myService: MyService) {}

  @SubscribeMessage('MY_MESSAGE')
  public async sendMessage(socket: Socket, data: IData): Promise<IData> {
    socket.emit(...)
  }
}

и service отвечает за канал TCP

import { Client, ClientProxy, Transport } from '@nestjs/microservices'
...
@Injectable()
export class MyService {
  @Client({
    options: { host: 'MY_HOST', port: MY_PORT },
    transport: Transport.TCP,
  })
  private client: ClientProxy

  public async myFunction(): Promise<IData> {
    return this.client
      .send<IData>({ cmd: 'MY_MESSAGE' })
      .toPromise()
      .catch(error => {
        throw new HttpException(error, error.status)
      })
  }
}
...