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

Mineflayer API服务器创建Bot时出现ECONNRESET错误求助

Mineflayer Bot 连接 ECONNRESET 错误排查与解决

先明确:ECONNRESET(错误码-104)本质是TCP连接被目标Minecraft服务器直接断开,结合你用Render免费套餐托管的场景,下面说具体原因和解决办法:

可能的触发原因

  • Render免费套餐网络限制:免费实例的出站连接可能有次数/速率限制,或者目标服务器的防火墙、反作弊系统直接拦截了Render的IP段
  • 连接参数处理不规范:从字符串分割出的port是文本类型,直接传给Mineflayer可能导致解析错误;若目标服务器开启正版验证,离线模式的Bot会被直接拒绝
  • 未监听Bot错误事件:你的代码没处理bot的error事件,导致错误直接抛到控制台,虽程序未崩溃但会输出冗余报错
  • 服务器端问题:目标MC服务器离线、版本与Mineflayer不兼容,或服务器设置了连接白名单未包含Bot来源IP

一步步解决

1. 修正连接参数与错误监听

把字符串类型的port转为数字,明确指定离线模式,同时新增错误和断开事件监听,避免无效实例占用内存:

case "create":
  let [username, ip, port] = data.split(",");
  let id = crypto.randomBytes(32).toString('hex');
  // 将port转为数字,默认使用25565
  let parsedPort = port ? parseInt(port, 10) : 25565;
  let bot = mineflayer.createBot({
    username: username || `Bromine_${id.slice(0, 8)}`,
    host: ip,
    port: parsedPort,
    // 明确开启离线模式,避免版本兼容问题
    offline: true
  });
  // 捕获连接错误,清理无效Bot实例
  bot.on("error", (err) => {
    console.error(`Bot ${id} 连接失败:`, err);
    delete bots[id];
    // 若为Web请求触发,需返回错误响应
    // response = {success: false, error: err.message};
  });
  // 连接断开时清理实例
  bot.on("end", () => {
    console.log(`Bot ${id} 连接已断开`);
    delete bots[id];
  });
  bot.messages = [];
  bot.on("message", function(msg, pos) {
    this.messages.push({jsonMsg: msg, position: pos})
  });
  bots[id] = {bot: bot};
  var response = {success: true, id: id};
  break;

2. 规避Render网络限制

  • 先测试连接公开的离线MC测试服,确认是否是目标服务器的问题
  • 若目标服务器拦截Render IP,可更换服务器或尝试第三方代理服务(免费代理稳定性有限,自行权衡)

3. 核对版本兼容性

  • 确保Mineflayer版本与目标MC服务器版本匹配,比如服务器为1.19.4,安装对应版本的Mineflayer:
    npm install mineflayer@^4.14.0
    
  • 检查目标服务器是否开启正版验证,若开启则离线模式Bot无法连接,需让服务器关闭验证或改用正版账号(若你坚持只支持离线模式,此条自行取舍)

4. 避免内存泄漏

每次Bot连接出错或断开后,务必从bots对象中删除对应条目,防止无效实例堆积占用内存。


内容的提问来源于stack exchange,提问作者The Empty String Photographer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 06:24:58