【问题标题】:How to create rooms with nestjs and socket.io如何使用 nestjs 和 socket.io 创建房间
【发布时间】:2019-09-20 19:22:48
【问题描述】:

我正在尝试在我的 nestjs 后端创建一个房间,但找不到有关此主题的任何信息。你可以找到文档here。文档似乎没有关于这个主题的任何内容。

import {
  SubscribeMessage,
  WebSocketGateway,
  WebSocketServer,
  WsResponse,
} from '@nestjs/websockets';
import { Client, Server } from 'socket.io';

@WebSocketGateway({namespace: 'story'})
export class StoryEventsGateway {
  @WebSocketServer()
  server: Server;

  @SubscribeMessage('createRoom')
  createRoom(client: Client, data: string): WsResponse<unknown> {
    return { event: 'roomCreated', data };
  }
}

【问题讨论】:

    标签: node.js typescript websocket socket.io nestjs


    【解决方案1】:

    通过将client: Client 更改为socket: Socket,您可以使用在使用socket.io 时习惯使用的套接字对象。

    这是编辑后的函数。

    import { Socket } from 'socket.io';
    import { WsResponse } from '@nestjs/websockets';
    
    createRoom(socket: Socket, data: string): WsResponse<unknown> {
      socket.join('aRoom');
      socket.to('aRoom').emit('roomCreated', {room: 'aRoom'});
      return { event: 'roomCreated', room: 'aRoom' };
    }
    

    【讨论】:

    • 这确实应该在文档中,突出显示。非常感谢您提供的信息。
    • 我同意它很容易被忽略,但如果您在页面docs.nestjs.com/websockets/gateways 上搜索handleEvent(client: Socket, data: string):,他们很快就会提到访问套接字实例。
    【解决方案2】:

    通过最新的 Nest JS 更新,您可以使用此代码从前端发送房间名称并将其传递给“数据”变量:

    @SubscribeMessage('createRoom')
      createRoom(@MessageBody() data: string, @ConnectedSocket() client: Socket) {
        client.join(data, err => {
          if (err) {
            this.logger.error(err);
          }
        });
      }
    

    【讨论】:

      猜你喜欢
      • 2020-01-10
      • 2013-10-10
      • 2016-05-08
      • 2013-10-18
      • 2013-10-09
      • 2016-08-02
      • 2018-12-11
      • 1970-01-01
      • 2019-06-13
      相关资源
      最近更新 更多