脉冲网络

脉冲网络

一个服务端的Fabric网络优化模组,采用数据包批处理及其他优化措施。与Krypton完全兼容。

管理

PulseNet Banner

PulseNet

高性能网络的心跳 - BorisShoes 出品的 Fabric 版

PulseNet 是一个 Fabric 模组,为你的 Minecraft 服务器带来高性能的数据包批量处理。通过用智能批处理替代标准的逐包网络刷新,PulseNet 在保持关键数据包低延迟传输的同时,降低了系统调用开销和 CPU 占用。

Website Discord

项目概述

PulseNet 是一个 Fabric 模组,用智能批处理系统替代 Minecraft 默认的逐包网络刷新。发出的数据包会被分组并一起刷新,从而大幅降低内核系统调用开销和事件循环任务调度,同时让战斗、聊天和其他延迟敏感的数据包保持即时传输。通过 Mixin 兼容性设计,可与其他 Fabric 模组无缝协作。


安装

PulseNet 是一个服务端 Fabric 模组。将它和 Fabric API 一起放入你的 mods/ 文件夹。

要求:


功能

功能 描述
智能数据包批处理 在一个 tick 内对发出的数据包进行分组,并通过单次内核系统调用刷新,而不是每个数据包一次。支持三种模式:smart_execution、strict_tick 和 interval。
写入队列 用单个批量写入任务替代逐包的事件循环任务提交,消除 lambda 分配和跨线程调度开销。
数据包合并 将类似的低优先级数据包(粒子、声音)打包成 BundlePacket,减少客户端接收的数据包数量。
爆炸优化 检测爆炸导致的大规模方块变化,在超过可配置阈值时用整区块重发替代单独的方块更新数据包。
数据包分类 自动将数据包分类为 Critical、Instant、Chat、Ignored 或 Coalesce——确保延迟敏感的数据包(keepalive、disconnect、combat)始终绕过缓冲区。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 batchingFlushInterval INTERVAL 批处理模式的间隔毫秒数。(默认: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 模组——无需客户端安装。

模组 描述 链接
Arcana Novum Minecraft 最大的仅服务端全功能魔法模组!添加强大的物品、多方块结构和 Boss! GitHub Modrinth CurseForge
Ancestral Archetypes 一个高度可配置的 Origins 风格模组,让玩家选择一种生物以获得独特能力! GitHub Modrinth CurseForge
Ender Nexus 高度可配置的 /home、/spawn、/warp、/tpa 和 /rtp 命令集于一身,且可单独禁用。 GitHub Modrinth CurseForge
Fabric Mail 游戏内虚拟邮箱系统,用于在线和离线玩家之间发送包裹和消息。 GitHub Modrinth CurseForge
Fabric Trade 添加 /trade,一个安全的玩家间交易界面。 GitHub Modrinth CurseForge
Limited AFK AFK 检测和管理,具有可配置的服务器踢出阈值。 GitHub Modrinth CurseForge
Links in Chat 让聊天中发布的 URL 可点击。 GitHub Modrinth CurseForge

支持与贡献

PulseNet 是 PulseMC 的一个开源项目。我们欢迎关于 Netty、Mixin 和协议级优化的贡献。


PulseNet:高性能网络的心跳。