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

部署Express+WebSocket应用至cPanel时遇http.Server.listen重复调用错误

解决Express+WebSocket部署到cPanel时的http.Server.listen()被多次调用错误

问题原因

app.listen()方法内部会自动创建一个HTTP服务器实例并调用其listen()方法,而你同时手动创建了HTTP服务器并调用server.listen(),这就导致了重复调用listen的冲突。Node.js 20.9.0可能对这种情况做了兼容处理,但20.12.2/19.9.0版本的检查更严格,因此触发了错误。

修复步骤

直接删除app.listen(PORT)的调用,仅保留手动创建的HTTP服务器的listen()调用,正确的代码结构如下:

const express = require('express');
const http = require('http');
const WebSocket = require('ws');

const app = express();
// 这里添加你的Express路由、中间件配置

// 创建承载Express的HTTP服务器
const server = http.createServer(app);

// 初始化WebSocket服务
const wss = new WebSocket.Server({ server });
wss.on('connection', (ws) => {
  // 处理WebSocket连接逻辑
});

// 仅调用一次listen,注意cPanel分配的端口要求
server.listen(8000, () => {
  console.log('服务器已启动在端口8000');
});

额外注意事项

  • cPanel虚拟主机对Node.js应用的端口有严格限制,需使用面板分配给你的专用端口,不要自行指定未授权的端口
  • 检查项目依赖的第三方中间件,确认没有隐式调用listen()的逻辑,避免再次触发冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 10:54:55