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

Node+TS+Express+Socket.IO部署Heroku后闲置崩溃(错误码H10)

解决Heroku上Node/TS/Express/Socket.IO应用闲置后崩溃(H10错误)

可能原因及对应解决方案

1. 端口配置错误

Heroku采用动态端口分配,硬编码固定端口会导致闲置重启时端口冲突,直接引发崩溃。

  • 修复代码:
const PORT = process.env.PORT || 3000;
const httpServer = app.listen(PORT, () => {
  console.log(`Server running on port ${PORT}`);
});
// Socket.IO需绑定到创建好的HTTP服务器
const io = require('socket.io')(httpServer);

2. 外部连接未处理重连

应用休眠时,数据库、Redis等外部连接会断开,重启时若未重新建立连接,会因连接失败崩溃。

  • 解决方案:
    • 为数据库连接配置连接池及自动重连参数;
    • 在Socket.IO连接事件中添加连接状态检查,异常触发重连;
    • 避免启动时建立一次性连接,改为按需建立或添加心跳检测。

3. TypeScript编译配置问题

若TS未正确编译为JS,或编译输出路径配置错误,Heroku重启时找不到入口文件会崩溃。

  • 检查package.json脚本:
"scripts": {
  "build": "tsc",
  "start": "node dist/index.js"
}
  • 确保tsconfig.json中outDir指向正确的编译输出目录,Heroku会自动执行build脚本完成编译。

4. Socket.IO传输超时

日志显示请求使用polling传输,闲置恢复时超时可能触发崩溃。

  • 调整Socket.IO配置,优先使用WebSocket并增加超时阈值:
const io = require('socket.io')(httpServer, {
  transports: ['websocket', 'polling'],
  pingTimeout: 60000,
  pingInterval: 25000
});

5. 休眠唤醒缺少初始化逻辑

应用从休眠唤醒时,未执行依赖服务初始化(如重新加载配置、建立连接),会导致启动失败。

  • 在应用启动流程中添加初始化检查,确保所有依赖服务连接正常后再监听请求。

排查技巧

执行heroku logs --tail实时查看崩溃时的详细错误栈,H10仅为表面错误,后续的具体异常信息(如未捕获错误、模块缺失)才是定位问题的关键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:15:37