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

Node.js WebSocket API部署到Heroku后无法正常运行如何解决

Heroku部署WebSocket服务无法连接的修复方案

核心故障原因

  • 协议不匹配:Heroku为所有应用默认提供HTTPS接入,对应WebSocket连接必须使用加密的wss://协议,直接替换HTTPS前缀为ws://发起的非加密连接会被Heroku路由层拦截,同时浏览器也会阻止HTTPS站点发起非加密WebSocket请求。
  • 代码缺失依赖引入:你贴出的代码未引入Node.js内置http模块,也未引入WebSocket服务对应的依赖包,部署环境下会直接抛出变量未定义错误导致服务启动失败。
  • 启动配置缺失:如果项目未配置正确的启动脚本,Heroku无法正常拉起你的Node服务。

修复步骤

  1. 调整前端连接地址:将WebSocket连接地址从ws://<project-name>.herokuapp.com改为wss://<project-name>.herokuapp.com即可,Heroku路由层会自动处理TLS证书终结,后端不需要额外配置SSL证书。
  2. 补全后端代码的依赖引入,修正服务初始化逻辑,完整可运行的web.js代码如下:
const http = require('http');
const express = require('express');
const { server: SocketServer } = require('websocket');

const app = express();
const port = process.env.PORT || 3000;

// 传入express实例兼容HTTP请求,比如后续提供静态前端页面
const server = http.createServer(app);

server.listen(port, () => {
  console.log("Listening on port ", port)
})

const wsServer = new SocketServer({httpServer: server})
const connections = []

wsServer.on('request', (req) => {
  const connection = req.accept()
  console.log('new connection')
  connections.push(connection)

  connection.on('message', (mes) => {
    connections.forEach(element => {
      if (element != connection) {
        element.send(mes.utf8Data)
      }
    })
  })

  connection.on('close', (resCode, des) => {
    console.log('connection closed')
    connections.splice(connections.indexOf(connection), 1)
  })
})
  1. 安装代码依赖,执行以下命令:
npm install express websocket
  1. 检查项目根目录的package.json,确保包含正确的依赖声明和启动脚本,参考配置如下:
{
  "name": "simple-ws-service",
  "version": "1.0.0",
  "dependencies": {
    "express": "^4.18.2",
    "websocket": "^1.0.34"
  },
  "scripts": {
    "start": "node web.js"
  }
}

注意:不要手动写死服务监听端口,必须使用process.env.PORT读取Heroku动态分配的端口,你原有代码的端口逻辑是正确的,不需要修改。

  1. 提交修改后的代码,重新执行git push heroku master完成部署即可。

内容的提问来源于stack exchange,提问作者Ankit Kumar Maurya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 01:24:33