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

使用ws包构建Node.js P2P服务器遇ECONNREFUSED错误求助

解决Node.js ws包P2P服务器的ECONNREFUSED错误

你遇到的核心问题其实很明确:你指定要连接的对等节点ws://localhost:5004根本没有运行,再加上代码里没处理WebSocket的error事件,导致连接失败直接触发程序崩溃。我给你一步步梳理解决方法:

1. 先给WebSocket添加错误监听,避免程序崩溃

ws客户端在连接失败时会触发error事件,如果不监听这个事件,Node.js就会抛出未捕获的异常导致程序崩溃。你需要在创建WebSocket实例的地方加上这段代码:

const WebSocket = require('ws');
// 假设这是你连接对等节点的代码
const peerSocket = new WebSocket(process.env.PEERS);

// 必须添加这个错误监听
peerSocket.on('error', (err) => {
  console.error(`连接对等节点 ${process.env.PEERS} 失败:`, err.message);
  // 这里可以根据需求添加重试逻辑,或者直接忽略该节点继续运行
});

这样即使某个对等节点没启动,你的服务器也能继续运行,不会直接崩溃。

2. 确保PEERS里的节点真的在运行

你执行启动命令时指定了PEERS=ws://localhost:5004,但这个端口的P2P服务器并没有启动,所以才会出现ECONNREFUSED。你需要先启动那个节点:

# 先启动端口5004的P2P节点
$ HTTP_PORT=3004 P2P_PORT=5004 npm run dev

等你看到这个节点的日志输出Listening on p2p port 5004之后,再启动你原来的节点(端口3002/5002),这样就能正常连接了。

3. 排查依赖与环境问题

如果你确实怀疑依赖混乱,可以按以下步骤清理重装:

  • 删除现有依赖文件夹:rm -rf node_modules
  • 清除npm缓存:npm cache clean --force
  • 重新安装依赖:npm install

另外提一句,你用的Node 9.11是比较老旧的版本了,虽然ws包理论上兼容,但老版本Node的网络API可能存在一些已知问题。如果上面的步骤都无效,可以考虑升级到Node.js的LTS版本(比如14.x或16.x),稳定性会好很多。

4. 验证端口状态的小技巧

如果你不确定某个端口有没有服务在监听,可以用这个命令检查:

sudo lsof -i :5004

如果没有任何输出,说明这个端口确实没有运行任何服务,必须先启动对应的P2P节点才行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:44:01