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

Nest.js + Socket.io部署Heroku后自定义端口无法连接求助

问题原因及解决方案

Heroku不允许应用绑定自定义端口,它会动态分配端口并通过PORT环境变量提供给应用,所有外部请求都会转发到这个端口。如果给@WebSocketGateway()指定自定义端口,Socket.io会尝试绑定到这个未被Heroku开放的端口,导致无法连接。

具体修复步骤:

  • 移除@WebSocketGateway()的自定义端口参数,让它默认绑定到Nest.js HTTP服务器使用的端口:
    // 原代码
    // @WebSocketGateway(8181, { cors: true })
    // 修改后
    @WebSocketGateway({ cors: true })
    
  • 确保Nest应用监听Heroku提供的PORT环境变量,在主入口文件中:
    async function bootstrap() {
      const app = await NestFactory.create(AppModule);
      await app.listen(process.env.PORT || 3000);
    }
    bootstrap();
    
  • 客户端连接时,直接使用Heroku应用的域名,无需指定额外端口:
    // 示例客户端连接代码
    const socket = io('https://your-heroku-app-name.herokuapp.com');
    
  • 检查CORS配置,确保允许客户端域名访问,可在网关或全局配置中设置:
    @WebSocketGateway({
      cors: {
        origin: ['https://your-client-domain.com'],
        credentials: true
      }
    })
    

补充说明

Heroku的容器化环境下,每个应用只能占用一个由平台分配的端口,WebSocket服务必须和HTTP服务共用这个端口,Socket.io会自动在同一端口上处理WS/WSS请求,无需单独配置端口。

内容的提问来源于stack exchange,提问作者Serafim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 01:59:55