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

Heroku部署Node.js uWebsockets.js出现R10错误无法绑定$PORT

问题根因

  • uWebSockets.js的listen方法参数顺序和标准Node.js HTTP服务存在差异:若要指定监听主机,正确参数顺序为listen(主机地址, 端口号, 回调函数),你的代码写反了端口和主机的位置,导致服务并未实际绑定到Heroku分配的$PORT上。日志中打印的是你自定义的port变量值,并非服务实际绑定的端口,因此出现了日志显示监听成功但实际未绑定的假象。
  • 你的当前服务仅配置了WebSocket路由,未处理普通HTTP请求,Heroku负载均衡的健康检查会发送HTTP请求验证服务可用性,即便端口绑定成功,也可能因健康检查无响应被判定为启动失败。

解决方案

1. 修改server.js代码

调整listen参数顺序,同时新增根路径的HTTP路由响应健康检查:

const uWS = require('uWebSockets.js');
const port = process.env.PORT || 9001;
const host = '0.0.0.0'

const app = uWS.App()
    // 新增HTTP根路由响应Heroku健康检查
    .get('/', (res, req) => {
        res.end('ok')
    })
    .ws('/*', {
        maxPayloadLength: 16 * 1024 * 1024,
        idleTimeout: 160,
    })
    // 调整参数顺序:主机在前,端口在后
    .listen(host, port, (token) => {
        if (token) {
            console.log('Listening to port ' + port);
        } else {
            console.log('Failed to listen to port ' + port);
        }
    });

如果你不需要指定特定监听地址,也可以省略host参数,uWS默认会监听0.0.0.0,直接写.listen(port, (token) => { ... })即可。

2. 可选优化Dockerfile

Heroku会自动忽略Dockerfile中的EXPOSE指令,你可以删除该行避免冗余,不会影响正常部署。

修改后重新部署即可解决R10错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 09:45:04