【问题标题】:NestJs Websocket, how to test and debug "Socket hang up"?NestJs Websocket,如何测试和调试“Socket hang up”?
【发布时间】:2022-01-20 11:51:09
【问题描述】:

我有一个相当简单的 Websocket 服务器,我想要实现的只是拥有一个套接字网关,它会根据数据库状态更新向侦听/连接的客户端发出事件。

这是我的实现:

@WebSocketGateway(5010, { transports: ['websocket'], cors: true })
export class SocketGateway
  implements OnGatewayConnection, OnGatewayDisconnect
{
  private readonly logger: Logger = new Logger(SocketGateway.name);
  @WebSocketServer() server: Server;

  constructor(private readonly socketService: SocketService) {}

  @SubscribeMessage('statusUpdate')
  updateStatus(data: any) {
    this.server.emit('statusUpdate', data);
  }

  handleConnection(client: any, ...args: any[]): any {
    return this.logger.log(`Client disconnected: ${client.id}`);
  }

  handleDisconnect(client: any): any {
    return this.logger.log(`Client connected: ${client.id}`);
  }
}

现在我正在尝试通过连接到此 URL 来使用邮递员进行连接 ws://localhost:5010

导致此错误socket hang up 不太确定它为什么会这样,也没有足够的信息来调试它。 如果有人能分享关于在哪里看的提示,我将不胜感激。

我在 macOS Monterey:12.0.1(最后更新)

已安装的 Websocket 库:

@nestjs/platform-socket.io:8.2.4

@nestjs/websockets": 8.2.4

谢谢

【问题讨论】:

    标签: websocket socket.io nestjs


    【解决方案1】:

    通过e2e测试,你可以试试这个例子:

    import * as WebSocket from 'ws'
    beforeAll(async () => {
      const moduleFixture = await Test.createTestingModule({
        imports: [
          SocketModule,
        ],
      }).compile()
    
      app = moduleFixture.createNestApplication()
      app.useWebSocketAdapter(new WsAdapter(app))
      await app.init()
    })
    
    it('should connect successfully', (done) => {
      const address = app.getHttpServer().listen().address()
      const baseAddress = `http://[${address.address}]:${address.port}`
    
      const socket = new WebSocket(baseAddress)
    
      socket.on('open', () => {
        console.log('I am connected! YEAAAP')
        done()
      })
    
      socket.on('close', (code, reason) => {
        done({ code, reason })
      })
    
      socket.on ('error', (error) => {
        done(error)
      })
    })
    

    this example is based on this answer

    【讨论】:

      猜你喜欢
      • 2019-12-10
      • 1970-01-01
      • 2016-11-29
      • 2018-06-01
      • 1970-01-01
      • 2020-08-16
      • 2019-12-28
      • 2022-01-06
      • 2014-12-17
      相关资源
      最近更新 更多