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

Node.js中WebSocket服务器无法与HTTP服务器一同启动的排查求助

排查WebSocket服务器无响应问题

让我帮你一步步定位和解决这个问题,首先看你代码里最关键的一个错误:

1. 修复connectToPeers的回调调用问题

在你的P2pServer类的connectToPeers方法里,你给socket.on('open')传递的是函数引用this.connectSocket,但既没有调用它,也没有传入必要的socket参数。这会导致主动连接其他节点时,新的socket不会被添加到sockets数组,也不会触发连接日志。

修改后的代码:

connectToPeers() {
  peers.forEach((peer) => {
    const socket = new Websocket(peer);
    // 这里要调用connectSocket并传入当前socket
    socket.on('open', () => this.connectSocket(socket));
  });
}

2. 添加错误日志,捕获隐藏问题

WebSocket连接失败或服务器启动出错时,默认不会抛出未捕获的错误,所以你需要添加错误监听来排查问题:

给主动连接的socket加错误监听

connectToPeers() {
  peers.forEach((peer) => {
    const socket = new Websocket(peer);
    socket.on('open', () => this.connectSocket(socket));
    // 添加错误日志,查看连接失败原因
    socket.on('error', (err) => {
      console.error(`连接节点 ${peer} 失败:`, err.message);
    });
  });
}

给WebSocket服务器本身加错误监听

listen() {
  const server = new Websocket.Server({ port: P2P_PORT });
  // 监听服务器启动或运行时的错误
  server.on('error', (err) => {
    console.error('WebSocket服务器错误:', err.message);
  });
  server.on('connection', socket => this.connectSocket(socket));
  this.connectToPeers();
  console.log(`正在监听P2P连接端口: ${P2P_PORT}`);
}

3. 验证WebSocket服务器是否真的在监听

有时候可能是端口被占用,或者环境变量P2P_PORT被意外覆盖。你可以:

  • 确认启动日志里的P2P_PORT是你预期的5001(或者自定义的端口)
  • 用命令行工具检查端口占用情况:
    # Mac/Linux
    lsof -i :5001
    # Windows
    netstat -ano | findstr :5001
    

如果端口被其他进程占用,要么杀掉那个进程,要么修改P2P_PORT环境变量换个端口。

4. 手动测试WebSocket连接

你可以用浏览器控制台或者ws客户端工具手动连接,验证服务器是否正常响应:

// 在浏览器控制台运行
const ws = new WebSocket('ws://localhost:5001');
ws.onopen = () => console.log('成功连接到WebSocket服务器');
ws.onerror = (err) => console.error('WebSocket连接错误:', err);

如果连接成功,你应该能看到服务端输出Socket connected的日志。

其他小检查

  • 确认依赖安装完整:运行npm install确保ws包已经正确安装
  • 检查Blockchain类的初始化是否正常,有没有抛出未捕获的错误导致p2pServer.listen()没有执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:51:19