
PulseNet 核心网络 网元 网络 神经矩阵 脉冲网络
一个服务端的fabric网络优化模组,使用数据包批处理和其他优化。完全兼容Krypton。
PulseNet
高性能网络的心跳 - BorisShoes 的 Fabric 版
PulseNet 是一个 Fabric 模组,为你的 Minecraft 服务器带来高性能的数据包批处理。通过用智能批处理替代标准的逐包网络刷新,PulseNet 降低了系统调用开销和 CPU 使用率,同时保持关键数据包的低延迟传输。
项目概述
PulseNet 是一个 Fabric 模组,用智能批处理系统替代 Minecraft 默认的逐包网络刷新。发出的数据包被分组并一起刷新,大幅减少内核系统调用开销和事件循环任务调度,同时保持战斗、聊天以及其他延迟敏感数据包的即时传输。通过 Mixin 兼容性设计,可与其他 Fabric 模组无缝协作。
安装
PulseNet 是一个服务端 Fabric 模组。将其与 Fabric API 一同放入你的 mods/ 文件夹即可。
要求:
Fabric Loader 0.18.5+
Minecraft 26.1+
Java 25+
功能
| 功能 | 描述 |
|---|---|
| 智能数据包批处理 | 在一个 tick 内对发出的数据包进行分组,并通过单次内核系统调用刷新,而非逐包刷新。支持三种模式:smart_execution、strict_tick 和 interval。 |
| 写入队列 | 用单个批量写入任务替代逐包的事件循环任务提交,消除 lambda 分配和跨线程调度开销。 |
| 数据包合并 | 将类似的低优先级数据包(粒子、声音)捆绑为 BundlePacket,减少客户端接收的数据包数量。 |
| 爆炸优化 | 检测爆炸造成的大规模方块变化,当超过可配置阈值时,用完整区块重发替代逐个方块更新数据包。 |
| 数据包分类 | 自动将数据包分类为 Critical、Instant、Chat、Ignored 或 Coalesce —— 确保延迟敏感的数据包(keepalive、disconnect、战斗)始终绕过缓冲区。Fabric 基础设施数据包(minecraft:register、minecraft:unregister)在 Connection 层面处理,以防止模组握手失败。 |
| 实时指标 | 内置指标系统,跟踪逻辑/物理 PPS、带宽、CPU 使用率、内存节省和写入队列效率。可通过命令或游戏内 boss 条查看。 |
| Mixin 兼容性 | 使用 @WrapOperation 方式,在所有其他 mixin(Polymer、服务端翻译等)之后 运行,确保与 Fabric 模组生态系统的完全兼容。 |
| 可热重载配置 | 所有设置均可通过 pulse.properties 和游戏内命令(/pulse config、/pulse reload)配置,无需重启。 |
命令
| 命令 | 描述 |
|---|---|
/pulse |
显示当前 PulseNet 版本。 |
/pulse reload |
从磁盘重新加载配置。 |
/pulse config |
在游戏内查看和修改所有配置设置。 |
/pulse netstats [network\|cpu\|ram\|all] |
显示实时网络、CPU 和内存统计信息。 |
/pulse netstats bar |
切换指标 boss 条叠加显示。 |
/pulse netstats reset |
将所有指标计数器重置为零。 |
/pulse packetNames |
列出所有观察到的数据包类名和频道 ID。 |
/pulse packetNames classes |
仅列出观察到的数据包类名。 |
/pulse packetNames channels |
仅列出观察到的自定义负载频道 ID。 |
/pulse packetNames reset |
清除观察到的数据包名称列表。 |
配置命令
以下命令可用于调整 pulse.properties 文件中的可配置设置,无需重启服务器(运行这些命令后使用 /pulse reload 以热替换更改)。这些命令可以附带一个值来设置该设置,或不带值使用以查看当前设置。
/pulse config batchingEnabled智能数据包批处理系统的总开关。为 true 时,发出的数据包会被缓冲并批量刷新,而非逐个刷新。(默认:true)/pulse config batchingMode批处理模式:smart_execution(tick 时刷新 + 限制)、strict_tick(仅在 tick 结束时刷新)、interval(定时刷新)。(默认:smart_execution)/pulse config batchingMaxBatchSize强制刷新前缓冲的最大数据包数量。(默认:1024)/pulse config batchingMaxBatchBytes强制刷新前缓冲的最大字节数。(默认:32000)/pulse config batchingFlushIntervalINTERVAL 批处理模式的刷新间隔(毫秒)。(默认:25)/pulse config batchingSafetyMarginBytes从最大批量字节限制中减去的安全余量(字节),以防止溢出。(默认:64)/pulse config batchingInstantPackets发送时应立即刷新缓冲区的数据包类名列表。(默认:ClientboundHurtAnimationPacket、ClientboundDamageEventPacket、ClientboundBlockEntityDataPacket)/pulse config batchingIgnoredPackets应始终完全绕过缓冲区的数据包类名列表。(默认:[])/pulse config batchingInstantChannels插件频道 ID 列表(例如axiom:hello),其自定义负载数据包在发送时应立即刷新缓冲区。使用/pulse packetNames channels来发现频道 ID。(默认:[])/pulse config batchingIgnoredChannels插件频道 ID 列表,其自定义负载数据包应始终完全绕过缓冲区。使用/pulse packetNames channels来发现频道 ID。注意:minecraft:register和minecraft:unregister在 Connection 层面处理,无论此列表如何,始终绕过缓冲区。(默认:[])/pulse config batchingChatPacketsBypass为 true 时,聊天相关数据包绕过缓冲区以即时传输。(默认:true)/pulse config batchingOffThreadBypass为 true 时,从服务器线程之外发送的数据包绕过缓冲区。(默认:true)/pulse config batchingWriteQueue为 true 时,缓冲的数据包会排队并在单个事件循环任务中写入,而非对每个数据包调用 Connection.send(),从而消除逐包 lambda 分配和跨线程任务调度。(默认:true)/pulse config batchingPacketCoalescing为 true 时,合并列表中的数据包在刷新时捆绑为 BundlePacket,减少客户端接收的数据包数量。(默认:true)/pulse config batchingCoalescePackets要合并为 BundlePacket 的数据包类名列表(例如粒子、声音)。支持使用点语法表示内部类(Foo.Bar)。(默认:ClientboundLevelParticlesPacket、ClientboundSoundPacket、ClientboundSoundEntityPacket)/pulse config batchingCoalesceBundleLimit每个 BundlePacket 的最大子数据包数量。原版客户端强制执行 4096 的硬限制。(默认:4000)/pulse config optExplosionsEnabled为 true 时,爆炸造成的方块更新按区块分组,如果超过阈值则替换为完整区块重发。(默认:true)/pulse config optExplosionsBlockChangeThreshold单个区块中触发完整区块重发(而非逐个更新)所需的方块变化数量。(默认:512)/pulse config optExplosionsLogOptimizations为 true 时,每次爆炸优化用区块重发替代方块更新时记录一条消息。(默认:false)/pulse config metricsEnabled为 true 时,指标收集系统处于活动状态并计算网络统计信息。(默认:true)/pulse config metricsUpdateInterval指标系统重新计算派生统计信息的频率(秒)。(默认:1)/pulse config metricsModuleNetwork启用网络指标模块(PPS、带宽)。(默认:true)/pulse config metricsModuleCpu启用 CPU 指标模块(进程 CPU 使用率估算)。(默认:true)/pulse config metricsModuleMemory启用内存指标模块(节省分配估算)。(默认:true)/pulse config metricsModuleWriteQueue启用写入队列指标模块(事件循环任务节省跟踪)。(默认:true)
权限节点
PulseNet 使用 Fabric Permissions API 进行命令权限管理。每个节点都有一个用于没有权限模组的服务器的后备原版权限等级。
通用
| 节点 | 默认 | 描述 |
|---|---|---|
pulsenet.pulse |
ALL |
访问 /pulse 基础命令(显示版本) |
pulsenet.reload |
GAMEMASTERS |
重新加载 PulseNet 配置文件 |
pulsenet.netstats |
GAMEMASTERS |
查看网络、CPU 和内存统计信息 |
pulsenet.netstats.bar |
GAMEMASTERS |
切换指标 boss 条叠加显示 |
pulsenet.netstats.reset |
GAMEMASTERS |
将所有指标计数器重置为零 |
pulsenet.packetnames |
GAMEMASTERS |
列出观察到的数据包类名和频道 ID |
配置
配置命令按配置值动态生成。下面的 <name> 对应 camelCase 配置键(例如 batchingEnabled、metricsUpdateInterval)。
| 节点 | 默认 | 描述 |
|---|---|---|
pulsenet.config |
GAMEMASTERS |
列出所有配置值 |
pulsenet.config.<name>.get |
GAMEMASTERS |
读取特定配置值 |
pulsenet.config.<name>.set |
GAMEMASTERS |
更改特定配置值 |
试试我的其他模组!
全部为服务端 Fabric 模组 —— 无需客户端安装。
支持与贡献
PulseNet 是 PulseMC 的开源项目。我们欢迎有关 Netty、Mixin 和协议级优化的贡献。
- Pulse Discord:加入我们的社区
- Boris 的 Discord:Boris 的模组 Discord
- 问题反馈:在 GitHub 上报告 Bug
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。