从卡成PPT到百人同服:手把手调好 Ogar 的 gameserver.ini,让你的 Agar.io 私服真正能打
【免费下载链接】OgarAn open source Agar.io server implementation, written with Node.js.项目地址: https://gitcode.com/gh_mirrors/og/Ogar
先讲讲我见过最典型的翻车现场
有个朋友兴致勃勃把 Ogar 搭起来,喊了一宿舍的人进来玩。结果十分钟后,聊天框里全是吐槽:有人画面一卡一卡像幻灯片,有人跑遍半个地图找不到几颗食物,还有人说"怎么满地图都是毒刺,走两步就分裂"。他跑来问我:"这服务器是不是坏了?"
服务器没坏,只是他用了 Ogar 的出厂默认配置。
Ogar 是一个用 Node.js 写成的开源 Agar.io 服务器实现,默认配置的设计目标是"能稳定跑起来",而不是"跑得爽"。好在,决定服务器体感的几乎全部旋钮,都集中在src/gameserver.ini这一个文件里。这篇文章就是带你逐个摸清这些旋钮——不求你成为调参大师,只求看完之后,你能按想要的游戏效果而不是按文件区块去调它。
💡 一句话先记住:gameserver.ini 不是配置说明书,而是你的服务器调音台。后面所有内容,都围绕"你想要的体验"展开。
第一步:先把服务器点亮,再谈优化
从零启动只要三条命令
如果你还没把项目拉下来,先执行:
git clone https://gitcode.com/gh_mirrors/og/Ogar cd Ogar npm install安装完依赖,启动服务器只需要一行:
node src/index.js看到[Game] Listening on port 443就说明成功了。默认情况下游戏端口是443,浏览器里打开agar.io/?ip=127.0.0.1:443就能连进你的私服。
⚠️ 如果提示
EACCES,多半是 443 这种低位端口需要管理员权限,Linux 上用sudo运行即可。如果提示EADDRINUSE,说明端口被占用了,典型元凶是 Skype——具体怎么处理,后面"急救"一节会讲。
动手改配置前的三件小事
- 先备份:把
src/gameserver.ini复制一份,命名成gameserver.ini.bak。改崩了随时还原,这是你所有调参实验的后悔药。 - 认识文件的注释:ini 文件里
;开头的是注释行,Ogar 官方在参数旁边写了不少说明,多读注释能少走弯路。 - 学会热重载:控制台里输入
reload可以重新加载配置文件,不用每次改完都重启进程。不过后面会提到,某些参数改了之后重启更稳。
把服务器点亮之后,我们正式开始"按目标调参"。
目标一:让全服帧率稳住、延迟不飘
这组参数负责的是性能与资源,就像给服务器做体检和配餐。玩家喊"卡"的时候,先来这里。
先给服务器定个容量上限
serverMaxConnections = 64─ 同时在线玩家上限,相当于餐厅的座位数。
座位太少,朋友来了被拒之门外;座位太多,厨房忙不过来全部上菜变慢。参考经验:4 核 8G 的机器跑 64 连接是比较稳的组合,硬件更好的可以往上加。记住一个原则:宁可排队,不要全员卡顿。
再调玩家的视野窗口
serverViewBaseX = 1280、serverViewBaseY = 720─ 玩家基础视野范围,可以理解成相机的取景框大小。
取景框越大,每个玩家需要服务器同步的实体就越多,带宽和 CPU 开销跟着上涨。配置文件里官方都写了警告:值设太高可能引起卡顿。如果你的服务器带宽紧张,把这两个值调低一点,玩家几乎感知不到区别,但带宽能省下一大截。
日志级别:平时 1,排查时 2
serverLogLevel = 1─ 日志详细程度:0 是完全静默,1 是控制台日志,2 是额外记录每个 IP 的连接情况。
生产环境用 1 就够了,2 的日志刷屏很快。只有你在排查"谁在连、谁在断"这类问题时,才临时切到 2。
打开统计小窗:时刻知道服务器状态
serverStatsPort = 88 serverStatsUpdate = 60serverStatsPort = 88─ 统计服务端口,浏览器访问http://服务器IP:88就能看到一份 JSON,里面是当前在线人数、观战人数、玩家上限、游戏模式、已运行时长等实时数据。
serverStatsUpdate = 60─ 统计数据每隔多少秒刷新一次。如果不想暴露统计信息,把端口设成负数即可直接禁用。
防泄漏的保底机制:定时自动重启
serverRestartInterval = 0─ 每多少分钟整服重启一次,设 0 或负数表示关闭。
Node.js 跑久了内存难免悄悄上涨,对于 7×24 小时挂机的服务器,可以设成 1440(24 小时一轮)。代价是到点全员掉线重进,所以记得挑人少的时间段。
💡 除了自动重启,控制台还有
restart 30s这类手动定时重启命令,运营时可以配合活动时间使用。
目标二:让玩家"饿不死也闲不住"
这组参数负责的是地图生态。玩家人一多就抱怨"没东西吃""毒刺太多",问题基本都出在这里。
地图边界:先决定世界有多大
borderLeft = 0 borderRight = 6000 borderTop = 0 borderBottom = 6000默认是 6000×6000 的正方形。小地图节奏快、玩家容易碰面;大地图适合长期生存、发育流。注意:地图变大之后,下面的食物和病毒数量也要跟着加,否则世界显得空空荡荡。
食物经济:控制"吃饭"的节奏
- foodStartAmount = 500─ 开局时地图上预置的食物总数
- foodMaxAmount = 500─ 地图上食物数量的硬上限,到顶后不再刷
- foodSpawnAmount = 10─ 每个 Tick 新刷出的食物数量(1 Tick 约 50ms)
- foodMass = 1─ 单颗食物的基础质量
把foodStartAmount和foodMaxAmount调大,开局就有"满地图自助餐"的富足感;调小则人人抢食,节奏更狠。想加快后期补给速度,就提高foodSpawnAmount。
病毒生态:地图上的"地雷"密度
- virusMinAmount = 10─ 地图上病毒数量下限
- virusMaxAmount = 50─ 病毒数量上限,超过后喷射的细胞会直接穿过病毒
- virusStartMass = 100─ 病毒的初始质量
病毒是改变战局的关键道具:少了,大球横冲直撞没人制裁;多了,玩家走两步就"被分裂",体验反而糟糕。建议小步调整,每次加减 10 观察手感。
喷射系统:攻击与逃命的弹药
- ejectMass = 13─ 每次喷出的细胞质量
- ejectMassCooldown = 100─ 两次喷射的最小间隔(毫秒)
- ejectSpeed = 110─ 喷射细胞的飞行速度
- ejectSpawnPlayer = 50─ 从喷射细胞重新生成玩家的概率(百分比)
想鼓励"喷射喂队友/喂病毒"这类操作,就把ejectMass调大、ejectMassCooldown调小;想压制喷射玩法,反着来即可。
目标三:让成长曲线"有手感"
这组参数决定玩家从出生到称霸全场的体验。调得好的服务器,新手能活、高手能秀。
- playerStartMass = 10─ 玩家初始质量,相当于游戏里的"出生体型"
- playerMaxMass = 22500─ 单个玩家质量上限,到了就吃不下了
- playerMaxCells = 16─ 最多能分裂出的细胞数量,决定"分身秀操作"的天花板
- playerRecombineTime = 30─ 分裂后多少 Tick 才能重新合并,控制分身战术的节奏
- playerSpeed = 30─ 基础移动速度,影响全场的操作手感
- playerMassDecayRate = .002─ 质量自然衰减率,相当于"体重的自然流失"
这几个参数最好成组调整。比如想做一个"发育快、打架爽"的爽快服:初始质量给到 15,最大细胞数放到 20,速度提到 35,再把衰减率调低,玩家会觉得"我的球长得飞快";想做硬核竞技服,则把速度压回去,让每一口食物都靠抢。
✅ 建议:每次只动 1~2 个参数,进游戏玩十分钟,再决定要不要继续调。一次改太多,出问题了根本不知道是哪一项的锅。
目标四:换着花样留住玩家(游戏模式)
serverGamemode决定整台服务器的玩法。改完这个参数,最好重启服务器——运行时用gamemode命令虽然也能切,但某些配套参数不一定同步生效,别赌。
| 模式 ID | 模式名称 | 一句话玩法 |
|---|---|---|
| 0 | FFA 自由混战 | 全员为敌,最经典的吃鸡式乱斗 |
| 1 | Teams 团队模式 | 分两队对抗,适合朋友开黑 |
| 2 | Experimental 实验模式 | 实验性机制,尝鲜向 |
| 10 | Tournament 锦标赛 | 带准备阶段和时限的竞技赛 |
| 11 | Hunger Games 饥饿游戏 | 生存到最后才算赢 |
| 12 | Zombie 僵尸模式 | 对抗不断刷新的僵尸细胞 |
如果开了锦标赛(10),[Gamemode]区块这几个参数就是你的主场:
- tourneyMaxPlayers = 12─ 一场最多参赛人数
- tourneyPrepTime = 10─ 玩家就位后的准备时间(秒)
- tourneyTimeLimit = 20─ 单场比赛时间上限(分钟)
🔥 进阶:把
serverMaxLB(默认 10)调大,排行榜就能展示更多玩家。做直播服、比赛服时很有用,围观观众一眼就能看到"大神们的比分"。
上线前必做的 5 项安全加固
服务器公网开放之后,妖魔鬼怪就来了。别急着广而告之,先把这几道锁装上。
1. 坐标防作弊
scrambleCoords = 1─ 对发送给客户端的坐标做混淆,让外挂难以精确锁定他人位置。
scrambleMinimaps = 1─ 混淆地图边界,让第三方小地图工具直接"瞎掉"。
这两个默认就是开启状态,确认没被关掉即可。它们是反外挂的第一道防线。
2. 反组队检测
serverTeamingAllowed = 0─ 值为 0 时启用反组队机制,防止玩家私下结盟破坏公平(注意别搞反:1 反而是允许组队)。
在 FFA 里,抱团取暖是最破坏体验的行为之一。想保持单挑的纯粹性,就把它设成 0。
3. 只放行官方客户端
serverDiscardForeignClients = 1─ 丢弃来自非官方域的连接,只接受agar.io域名的客户端。
⚠️ 这条有讲究。Ogar 源码里白纸黑字写着:如果你改掉这段校验、允许其它域名的客户端接入,可能构成版权侵权并招致法律风险。开私服本身就游走在灰色地带,这一项保持默认、别乱动,是对自己最稳妥的保护。
4. 连接上限兜底
前面说的serverMaxConnections同时也是抗压阀:攻击者挤满连接池,正常玩家就进不来。别把它设得比你的机器承受能力还高。
5. 敏感信息别外泄
统计端口(serverStatsPort)默认开着,如果你不想把服务器家底公开给所有人看,把它设成负数就能彻底关掉。
运营者的控制台工具箱
服务器跑起来后,控制台就是你的管理面板。下面这些命令请存进收藏夹:
| 命令 | 作用 |
|---|---|
playerlist | 查看在线玩家列表(ID、IP、昵称、细胞数、分数、坐标) |
status | 查看连接数、内存占用、运行时长、游戏模式 |
addbot [数量] | 补几个机器人撑场面,测试或填房用 |
kick [玩家ID] | 踢人;kickall清场,kickbot单独清机器人 |
mass [玩家ID] [质量] | 直接改某玩家质量(管理员执法神器) |
food [X] [Y] [质量] | 在指定坐标刷食物 |
virus [X] [Y] [质量] | 在指定坐标刷病毒 |
tp [玩家ID] [X] [Y] | 把某玩家传送到指定坐标 |
gamemode [ID] | 运行时切换游戏模式 |
change [参数名] [值] | 临时修改任意配置,重启后恢复原状 |
reload | 重载 gameserver.ini |
restart [时长] | 定时/立即重启服务器,可restart abort取消 |
pause | 一键暂停游戏世界 |
help | 查看全部命令说明 |
💡 技巧:
playerlist输出里会标出每个玩家的 IP,配合kick使用,就是最朴素的反作弊手段——看到可疑的重复 IP 就清出去。
故障急救与三套即贴即用配置
常见问题速查
| 现象 | 可能原因 | 处理办法 |
|---|---|---|
启动报EADDRINUSE | 443 端口被占用(Skype 老干这事) | 关掉占用程序,或把serverPort改成 8443 等,连接地址同步改成agar.io/?ip=127.0.0.1:8443 |
启动报EACCES | 无权限绑定低位端口 | 用 root/管理员权限运行 |
| 玩家普遍喊卡 | 连接数过高或视野值过大 | 压serverMaxConnections,降serverViewBaseX/Y,临时开serverLogLevel = 2看日志 |
| 改完模式没生效 | 运行时切换的兼容问题 | 改 ini 后重启服务器 |
| 内存越跑越高 | 长期运行的必然趋势 | 设serverRestartInterval定时重启 |
三套场景配置
场景 A:好友小服(8 人以内,轻量)
[Server] serverMaxConnections = 16 serverViewBaseX = 1024 serverViewBaseY = 720 serverLogLevel = 1 [Border] borderRight = 4000 borderBottom = 4000小地图 + 小视野,朋友之间玩一局接一局,节奏紧凑。
场景 B:公开竞技服(50~100 人)
[Server] serverMaxConnections = 100 serverPort = 443 serverGamemode = 0 serverBots = 10 serverViewBaseX = 1024 serverViewBaseY = 768 serverStatsPort = 88 serverLogLevel = 1 serverTeamingAllowed = 0 serverMaxLB = 20 [Border] borderLeft = 0 borderRight = 8000 borderTop = 0 borderBottom = 8000 [Spawn] foodSpawnAmount = 15 foodStartAmount = 1000 foodMaxAmount = 2000 virusMinAmount = 20 virusMaxAmount = 100 [Player] playerStartMass = 15 playerMaxCells = 20 playerSpeed = 35大地图配足量食物,100 人也吃得饱;机器人垫底保证新手进来有东西可吃;反组队已开启,公平有保障。这是覆盖大多数场景的"六边形战士"配置。
场景 C:锦标赛直播服
[Server] serverGamemode = 10 serverMaxConnections = 32 serverMaxLB = 32 [Gamemode] tourneyMaxPlayers = 12 tourneyPrepTime = 10 tourneyTimeLimit = 2012 人一局、20 分钟限时,排行榜拉满,适合做成观赏性赛事。
现在,轮到你动手了
回头看那个"卡成 PPT"的翻车现场——其实他没有做错任何事,只是少了一次系统的调参之旅。如今你已经知道:想流畅,去调连接数、视野和日志;想好玩,去调食物、病毒和喷射;想公平,去开反组队和坐标混淆;想留住玩家,还有六种模式随时切换。
下一步很明确:打开你服务器里的src/gameserver.ini,先备份,然后从第一个参数试起。不必追求一步到位,改一个、玩十分钟、再改下一个——改崩了大不了还原备份重来,反正后悔药你已经备好了。等你的私服从"能跑"变成"让人上瘾",再回来跟我说一声,我们聊聊更进阶的插件玩法。
每一台丝滑的 Agar.io 私服背后,都站着一个愿意花十分钟调参的服主。下一个,就是你。
【免费下载链接】OgarAn open source Agar.io server implementation, written with Node.js.项目地址: https://gitcode.com/gh_mirrors/og/Ogar
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考