
render 免费版会因闲置超时自动休眠应用,导致 mineflayer 机器人频繁掉线重连;需通过外部心跳请求(如 cron-job.org)定期唤醒服务,配合合理重连逻辑与心跳保活机制才能长期稳定运行。
render 免费版会因闲置超时自动休眠应用,导致 mineflayer 机器人频繁掉线重连;需通过外部心跳请求(如 cron-job.org)定期唤醒服务,配合合理重连逻辑与心跳保活机制才能长期稳定运行。
在 Render 上部署 Mineflayer 机器人时出现“反复离开并重连服务器”的现象,根本原因并非代码逻辑错误,而是 Render 免费计划的运行机制限制:Web 服务类型(Web Service)在连续 15 分钟无任何 HTTP 请求时会自动进入“休眠”(spin down)状态。一旦休眠,Node.js 进程被终止,bot 实例随之销毁,触发 bot.on('end') 并执行 setTimeout(initBot, 5000) —— 但此时进程已退出,重连实际无法执行;后续 Render 可能因健康检查失败或新请求触发冷启动,造成“闪退→重启→再连接→再休眠”的恶性循环。
✅ 正确解法分三步:
1. 将服务类型改为「Web Service」并暴露 HTTP 健康端点
Render 要求 Web Service 必须响应 HTTP 请求以维持活跃。你需要添加一个轻量 Express 服务器,监听 /health 或根路径:
const express = require('express')
const app = express()
const PORT = process.env.PORT || 3000
app.get('/health', (req, res) => {
res.status(200).send('OK')
})
app.listen(PORT, () => {
console.log(`Health server running on port ${PORT}`)
})
⚠️ 注意:Render 会将
process.env.PORT注入你的服务,必须使用该端口,否则健康检查失败导致服务被强制终止。
2. 使用外部定时器持续“唤醒”服务(推荐 cron-job.org)
注册 cron-job.org(免费),创建新任务,设置为每 9–10 分钟 访问你的 Render 服务 URL(如 https://your-bot.onrender.com/health)。频率需小于 15 分钟,留出安全缓冲。
3. 优化 bot 重连逻辑,避免资源泄漏
你当前的 initBot() 递归调用存在隐患:每次重连都新建 bot 实例,但未清除旧事件监听器(如 physicTick),易引发内存泄漏和行为错乱。应改用显式销毁 + 单实例管理:
let bot
function createBot() {
return mineflayer.createBot({
host: 'MY SMP ADDRESS',
port: 24383,
username: 'AFKBot',
version: '1.20.1', // 显式指定版本,避免自动探测失败
auth: 'mojang' // 如需微软账号登录,设为 'microsoft'
})
}
function startBot() {
if (bot) bot.quit() // 安全清理上一实例
bot = createBot()
bot.once('spawn', () => {
console.log('[BOT] Spawned. Teleporting...')
bot.chat('/tp @s 4 76 5')
})
bot.on('physicTick', () => {
const playerFilter = e => e.type === 'player'
const nearest = bot.nearestEntity(playerFilter)
if (nearest) {
const pos = nearest.position.offset(0, nearest.height, 0)
bot.lookAt(pos)
}
bot.setControlState('jump', true)
})
bot.on('end', (reason) => {
console.warn(`[BOT] Disconnected: ${reason}. Reconnecting in 5s...`)
setTimeout(startBot, 5000)
})
bot.on('error', console.error)
}
startBot()
? 额外建议(提升稳定性)
-
禁用 Render 自动 HTTPS 重定向(若开启,可能干扰 TCP 连接):在 Render Dashboard → Environment →
REDIRECT_HTTP_TO_HTTPS设为false(Mineflayer 使用原生 TCP,不走 HTTP)。 -
添加日志输出:使用
console.log/console.warn输出关键事件,便于在 Render 日志中排查(Dashboard → Logs)。 - 考虑升级为 Render “Static Site + Background Worker” 架构:若长期运行,可将 bot 改为 Background Worker 类型(不强制要求 HTTP 端点),配合自定义心跳逻辑更可靠(需付费计划支持)。
通过以上配置,你的 Mineflayer 机器人即可在 Render 免费层稳定驻留,真正实现 24/7 AFK 在线。










