Blog

Factorio 多人服务器与 mod 同步

六月开局前浪费掉一整个晚上:六个人客户端各装各的,有人多启用一个质量相关的 mod,全员卡在 mods mismatch。Factorio 对「所有人完全一致」极其严格——下面是联机物流纪要:谁同步什么、服务端怎么当权威、版本如何冻结、存档怎么轮转。目标是下次开局前把清单置顶,而不是再在语音里对线到半夜。

服务端基线

官方 headless 包加 systemd,独立用户运行。server-settings.json 里固定名称、密码、自动存档间隔、最大玩家数。防火墙只放游戏端口。进程崩溃可以重启,但要避免错误配置导致无限崩溃循环打满日志盘。

存档与 mod 目录权限只给服务用户;不要 root 开服。数据目录纳入日常备份(本机滚动加 NAS 冷拷),大版本或大改工厂前再手动双备份。更新 headless 的流程与其它游戏服类似:停服、备份、更新、盯日志、管理员先进。端口与进程由 systemd 统一托管后,排障时先看单元状态与日志时间线,再怀疑 mod 本身。

联机不是单人沙盒的线性放大:多一个人进服,就多一份「客户端是否与服一致」的不确定性。把一致性流程写清楚,比再找一台更高配的机器更能减少开局前的无效等待。

物流原则:服务端说了算

多人联机里,真正的「源」是服务器上的三样东西:

  • mods/ 目录(每个 mod 的 zip)
  • mod-list.json(启用集合)
  • 地图存档本身

客户端必须对齐同一集合。口头说「都装上 Space Age 相关」一定会偏——有人装了依赖链上的可选包,有人小版本差一位,有人客户端多勾了一个「看起来无害」的 UI。我们的同步链路改成:

  1. 管理员在测试机调好 mod 组合,开本地图验证能进、科技树与配方无炸
  2. 导出 mods/ 与 mod-list.json,附带版本号清单(名称、版本、hash 任选)
  3. 上传到服务端,停服替换
  4. 清单发群,或丢进私有 git 小仓库当唯一说明
  5. 全员按清单启用,再进服

有人用同步盘丢 zip 也可以,但 以服上文件版本为准,同步盘只是运输层。进不去时先问「和服上清单是否逐项一致」,而不是先怪网络。

那次 mismatch 的现场

玩家 A:多开了一个仅客户端以为无害的 mod
玩家 B:某 mod 小版本 1.2.3 vs 服 1.2.1
玩家 C:禁用了服上启用的 QoL
结果:无人能进,日志只提示 mods 不一致

处理并不高深:把服上 mod-list.json 贴群,全员重置为与服一致,禁止「我先试试看」私自加 mod。开局后进入 版本冻结期:确需升级则约定时间,先备份存档,全员同时更。冻结不是死板,是把变更成本集中到窗口里,避免有人上班摸鱼升了半截、晚上全员回档。

若有人坚持要试新 mod,正确姿势是:另开测试存档或测试服,验证后再走正式清单流程。生产档不是实验田。依赖链也要写进清单:只写顶层 mod 名称、不写传递依赖版本,下次更新时仍可能 silent 漂移。我们后来在仓库里同时保留「启用列表」和「zip 文件名含版本」两份信息,对线成本立刻下降。

存档轮转与「物流节点」

自动存档保留 N 份往往不够:

  • 日常:自动档滚动,防止单次崩溃
  • 里程碑:手动命名,例如 before-megabase-2026-06-xx.zip
  • 大改工厂、迁基地、批量蓝图铺设前:再手存一份

坏档、误拆主总线或 diggy 类灾难时,你需要的是「昨天」或「改之前」,不是唯一的 latest。蓝图书与交换用的地图走网盘或仓库,别沉在聊天记录——那是联机物流里第二容易丢的东西,第三是「当时到底启用了哪个版本」。

性能与 tick:远程玩家也是物流的一部分

工厂变大后瓶颈几乎总是 CPU 单核与 UPS(updates per second),不是带宽。人数不多时,装饰性 mod、过多动态特效、无节制电路与巨型物流机器人海会先把 tick 打穿。远程高延迟玩家更需要服务器 tick 稳定,而不是再堆三个 UI mod。

监控可以用内置统计或外部看进程 CPU;UPS 明显掉就减负担:实体数量、脚本频率、更新节奏。别在 tick 告急时还往同步清单里塞重型 mod。地图交换与大蓝图粘贴尽量错开高峰,避免所有人同时卡在同一逻辑尖峰。有远程玩家时,优先保证服务器逻辑稳定,再谈「再来一个方便建造的辅助 mod」——体验差往往来自掉 tick,而不是少一个按钮。

更新夜检查单(联机专用)

  1. 公告停服窗口,说明是否改 mod
  2. 双备份存档(滚动档之外再留里程碑)
  3. 更新 headless 与 mod,严格按清单
  4. 启动后看日志,管理员先进验证
  5. 群发当前 mod 清单的版本表或 hash
  6. 全员确认一致后再喊开厂

异星工厂的快乐建立在同步纪律上——和运维是同一块肌肉:权威源清晰、版本可冻结、存档可回滚。把清单仓库链接置顶,比再开一局「今晚只是微调」省心得多。

最后补一句运营层面的话:群里固定一个「当前服版本与 mod 清单」置顶消息,有人新加入时先对齐再进,比进服失败后再截图日志高效。联机物流的终点不是网盘传得有多快,而是全员对「以谁为准」没有争议。

← Back to Blog