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
相关产品推荐
相关产品推荐

