遇到的问题
本文章只在高带宽需求情况下优化显著,如果想借此优化大量cpu性能其实还是有点有限的,如果你想进一步压榨mc服务器的性能或者节省带宽,其实有个近乎无感的方案,如标题所示,但前提是你的cpu要有性能冗余,或者带宽足够,什么?你不知道你服务器是性能不够还是带宽不够,也许这并不在本篇文章的讨论范围之内,如果你知道那我现在应该做什么:
network-compression-threshold=256
这是一个配置项,存在与各种代理端和各种单端配置文件,代理端配置文件为config.yml单端配置文件为server.properties配置内都有此项目的配置项,借用官方wiki对此配置项的解释:
为1M小水管的Minecraft服务器加速的各种尝试 - 知乎
知乎有篇文章通过此配置文件将带宽需求压缩到1M,追求极限的可以参考。其实大部分服主很难说达到带宽不够用的情况,cpu性能不够用可以换cpu或者优化其他项,但是如果带宽不够用,如果是使用的是云服务器之类的业务加带宽就需要加钱,其实此配置项是通过用CPU压缩网络压缩包来达到用CPU性能换带宽节省的,反之同理,含义是网络封包压缩的阀值。例如设置为16,代表封包大于16才被压缩,设置成256代表着封包大于256才被压缩。设置的值越小则会压缩更多的封包,可以使得宽带使用减少,提高网络流畅程度,但是也会增加性能的开销,设置的值太小,例如小于等于32会明显增加对性能的开销,不建议这么做。通常如果你的服务器是群组服有代理端bc什么的,你只需要修改bc的config.yml内的此配置项,子服需要在server.properties内调整为关闭数据包压缩,填写为-1
如果你想优化CPU占用,你可以将此配置项设置为-1 代表完全禁用数据包压缩
如果你想优化带宽占用,你可以将此配置项设置为0及以上的数值
当然我的服务器是群组服,CPU为9950x所以设置的值为32
实例测试

本服在一次圣诞节活动的人数情况大概是:一共有5个生存子服,2服大概40人+ 3服大概30人+全服零零散散有140人,特指2、3服是因为他们大部分玩家都在聚集开派对,但是因为设置值为0,压缩全部数据包,其实也就50m的上行,但是这种玩家聚集环境对带宽的要求极大!因为这是一种握手效应,每秒产生的“微小包”(如转头、走路)是指数级增长的,当时在活动高涨时,甚至飙升到了90m!
分散状态: 如果 30 个玩家分散在世界各地,玩家 A 的移动只发给玩家 A 自己(确认)和极少数附近的生物。
聚集状态: 当 30 个玩家聚集在同一个主城或活动中心时:
玩家 1 的每一个动作(走位、转头、挥手、换装)都要同步给其他 29 个人。
玩家 2 的动作也要同步给其他 29 个人。
但是我是mod服,此实例只能做个参考,所以大致得到理论为:
人聚在一起更吃带宽,分开生存游玩更吃CPU
在了解这个配置原理之前我一直以为就是需要无脑上带宽,不然根本开不了大型活动,人一旦聚在一起握手效应导致的网络包体就特别多,非常吃网络上行,其实可以在玩家日常游玩时调高配置项保证性能,在开活动或者要进行高带宽活动时调低或者之间全部压缩数据包来节省带宽
如果你的服务器是Fabric端你还可以安装增强数据包压缩 (Enhanced Packet Compression) - MC百科此mod来更进一步压缩