You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 02:25:39