使用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
相关产品推荐
相关产品推荐

