如何解决NestJS + Socket.IO中的‘socket hang up’错误?
解决NestJS Socket.IO服务器连接报错"socket hang up"的问题
核心问题分析
你遇到的socket hang up错误主要是因为手动初始化了Server实例,干扰了NestJS对Socket.IO服务器的自动管理。
具体修复步骤
1. 移除手动创建的Server实例
在MockGateway中,@WebSocketServer()装饰器会自动由Nest注入正确的Server实例,不需要手动new Server()。修改代码如下:
@WebSocketGateway({ cors: { origin: '*', }, }) export class MockGateway { @WebSocketServer() server: Server<ServerToClient, ClientToServer>; // 移除手动初始化的= new Server(...) @SubscribeMessage(MockEventName) mock( @MessageBody() data: string, @ConnectedSocket() socket: Socket ): void { console.log(data); socket.emit(MockEventName, { message: 'response' }); } }
2. 修正wscat连接命令
Socket.IO默认使用/socket.io路径,直接连接ws://localhost:80会找不到正确的端点。使用以下命令连接:
wscat -c ws://localhost:80/socket.io/?EIO=4&transport=websocket
可选:显式指定网关路径(如果需要自定义)
如果希望自定义Socket.IO的路径,可以在@WebSocketGateway配置中添加path选项:
@WebSocketGateway({ cors: { origin: '*', }, path: '/custom-socket-path', // 自定义路径 })
对应的连接命令改为:
wscat -c ws://localhost:80/custom-socket-path/?EIO=4&transport=websocket
验证修复
重启NestJS服务后,使用修正后的wscat命令连接,应该能成功建立WebSocket连接,之后就可以发送MockEventName事件进行测试。
内容的提问来源于stack exchange,提问作者yio
相关产品推荐
相关产品推荐

