
网络性能系统
全面网络性能革新。如果让每个人都感觉像在玩单人游戏呢?
查看大图[size=6][b]网络性能系统[/b][/size]
[size=4]一次全面的网络改造。[b]如果所有人都能拥有单人游戏的体验会怎样?[/b][/size]
[line]
网络性能系统(Network Performance System)是一次全面的网络改造,旨在解决高延迟带来的问题。
在《英灵神殿》中,大多数对象由用户模拟。因此,某个区域内只要有一个高延迟用户,就可能让所有事物或各种各样的事物变得糟糕。本模组旨在通过多种方式解决这一问题。
[line]
[size=5][b]为何本模组与其他网络模组不同[/b][/size]
其他所有《英灵神殿》网络模组都把多人游戏性能当作**带宽**问题来处理——压缩、更大的缓冲区、更高的发送速率、过滤广播。对于一个基地里十个人占满共享上限的情况,这个判断是正确的。但它无法应对规模更大的分布式服务器,也无法应对来自地理位置上差异极大的多个玩家。
NPS 通过多种方式解决这些问题:
[list]
[*]每个对等端都有自己的往返时间(RTT)、健康检查和带宽估算
[list]
[*]这允许动态调整,以绕过质量较差的连接[/*]
[*]带宽充足但延迟较高的玩家,服务器可以对其更积极地发送数据作为补偿[/*]
[*]可以围绕连接较差的玩家动态调整对象所有权,为该区域内所有玩家提供最佳体验[/*]
[/list][/*]
[*]需要网络调用才能交互的对象会提前转移所有权,从而大大降低出现延迟场景的可能性[/*]
[*]在活动请求期间改变所有权的对象,其请求会正确重定向到新的所有者;如果物品仍然无法送达,则会掉落在工位上而不是丢失[/*]
[*]对本地重要的对象(例如脚步声)只在本地进行网络广播,而不是在服务器全局广播[/*]
[*]与原生版本相比,服务器垃圾回收的频繁变动显著减少[/*]
[/list]
[line]
[size=5][b]安装[/b][/size]
[b]仅服务端安装即可生效。[/b]原生客户端无需安装任何内容,即可获得发送窗口、所有权、调度器、工位请求和生物命中修复,服务器会跟随它们实际所在的位置,而不是两秒前的位置。服务器还会降低向每个玩家发送已稳定或远处生物的频次。
[b]同时在客户端安装[/b]会为这些客户端增加延迟补偿、实时位置报告以及从死连接中干净退出的能力,并让他们拥有的船只转移给掌舵的人。由他们模拟的生物在站立不动时会停止反复发送自身数据,这在圈养的驯服动物旁边最为重要。
混合群体没有问题——收益是按玩家计算的,未安装模组的客户端行为与原生完全一致。**没有版本锁定**:没有人会因为没装它而被踢出。
适用于专用服务器和玩家主持的游戏。
需要 [url=https://valheim.thunderstore.io/package/denikson/BepInExPack_Valheim/]BepInEx[/url] 和 [url=https://valheim.thunderstore.io/package/ValheimModding/Jotunn/]Jotunn[/url]。
[line]
[size=5][b]诊断和报告问题[/b][/size]
一个简单的入手方式是 [font=Courier New]nps_stats[/font] 显示。运行 [font=Courier New]nps_stats_collect[/font](需要 [font=Courier New]devcommands[/font],因为每次采样每个 tick 每个对等端都要调用一次 Steam),进行游戏,然后运行 [font=Courier New]nps_stats[/font]。
链路压力表中标记为 [font=Courier New]LOSSY[/font] 的玩家已经在被处理了:服务器会调低该玩家的发送速率,直到其连接不再丢包,一旦干净就再调回去,且不会改变其他人的速率([font=Courier New]Steam Transport / Enable Loss Backoff[/font])。如果某个玩家的丢包情况没有改善——一旦其速率低于其连接原本承载的速率,或处于最低速率——说明其连接问题无法通过调整速率解决:他们会恢复到全速并保持在那里,直到服务器重启。在服务器端中断期间测得的丢包会被忽略。"Loss backoff" 区块会显示谁被降速以及降了多少。
[quote][b]卡顿、橡皮筋、攻击打不中?发送一份报告。[/b]
[b]服务器所有者:[/b]在 [font=Courier New]BepInEx/config/MidnightsFX.NetworkPerformanceSystem.cfg[/font] 中,在 [font=Courier New]Monitoring[/font] 部分将 [font=Courier New]Enable Network Monitoring = true[/font]。无需重启,管理员也可以在游戏内更改。复现问题游玩一遍,将其改回 [font=Courier New]false[/font],然后压缩 [font=Courier New]BepInEx/NpsMonitoring/[/font] 中最新的文件夹。
[b]玩家:[/b]除非服务器要求,否则你的游戏不会发送任何内容,并且绝不会发送名称、平台 ID、地址或聊天内容。若仍想选择退出,请在你自己的该文件副本的 [font=Courier New]Client config[/font] 部分将 [font=Courier New]AllowMonitoringUpload = false[/font]。服务器无法覆盖此设置。它只会阻止你的游戏上传:服务器仍然会在匿名会话编号下记录其连接端的情况,例如你的延迟。
[b]然后[/b]将压缩包作为 [url=https://github.com/MidnightsFX/Valheim-Network-Performance-System/issues]GitHub issue[/url] 或在 [url=https://discord.gg/Dmr9PQTy9m]Discord[/url] 上发布,并描述你所看到的情况:发生了什么、发生频率、大致时间以及在线玩家数量。请参阅下面的"记录了什么"。 [/quote] 如果生物出现橡皮筋、攻击无效,或玩家进进出出时出现卡死,服务器可以记录网络当时在做什么,以便进行诊断而不是猜测。
[list=1]
[*]在服务器上,在 [font=Courier New]Monitoring[/font] 部分将 [font=Courier New]Enable Network Monitoring[/font] 设为 [font=Courier New]true[/font]。无需重启,管理员可以在游戏内更改。[/*]
[*]复现问题游玩一遍。与平常玩家一起度过一个晚上最为理想。[/*]
[*]将其改回 [font=Courier New]false[/font]。[/*]
[*]压缩服务器上 [font=Courier New]BepInEx/NpsMonitoring/[/font] 下最新的文件夹并发送,附上一句关于玩家看到了什么以及大致时间的说明,作为 [url=https://github.com/MidnightsFX/Valheim-Network-Performance-System/issues]GitHub issue[/url] 或在 [url=https://discord.gg/Dmr9PQTy9m]Discord[/url] 上发布。[/*]
[/list]
**记录了什么:** 每次生物更换所有者以及该更换是否保持、消息被投递给已不再拥有目标对象的玩家、每个玩家的生物汇报的规律性、每个玩家的延迟、连接质量、服务器每秒向其发送和接收的数据量,以及这些流量的构成:游戏自身的哪些消息、哪些模组的消息(按模组给它们的命名)以及哪些类型的对象。安装了模组的客户端会补充只有它们才能看到的内容:生物在易手时在做什么、它在与谁战斗、它在屏幕上跳了多远、什么杀死了它们正在模拟的每只生物、它们模拟的生物更换所有者的频率、帧率,以及它们游戏发送的消息名称。这会使每个客户端每秒最多上传 2 KB,以小批量发送,当连接忙于游戏自身流量时会被暂缓,因此记录绝不会拖慢它。
**不记录什么:** 玩家名称、Steam 或平台 ID、IP 地址、聊天。玩家仅以游戏为其该连接分配的随机会话编号出现,位置四舍五入到米。任何玩家都可以通过在自己的配置中将 [font=Courier New]AllowMonitoringUpload[/font] 设为 [font=Courier New]false[/font] 来拒绝发送任何内容。
关闭时它不产生任何开销:它使用的钩子只在开启时安装。文件夹由 [font=Courier New]Max Disk MB[/font] 限制(默认 4096,跨所有会话)。达到上限时记录停止,日志会说明;已记录的内容不会被删除,因此请自行清理旧会话。[font=Courier New]nps_stats[/font] 显示它是否在运行以及是否有内容被丢弃。
[line]
[size=5][b]不兼容[/b][/size]
其他重写相同代码的网络模组:FiresGhettoNetworking、VBNetTweaks、SkadiNet、BetterNetworking、Smoothbrain's Network、NetworkTweaks、WarheimNetwork、TimeoutLimit。BepInEx 会拒绝与它们一起加载本模组,而不是让你处于半补丁状态。尤其是 TimeoutLimit,它不再是需要放弃的东西:[font=Courier New]Connection Timeout[/font] 设置涵盖了相同的内容,并且不同于只在单一层提高超时,它们会同时移动原版发生超时的两个位置。
[size=4][b]已验证兼容[/b][/size]
不同层,无重叠:
[list]
[*][b]LeanNet、Compress、Scenic[/b] —— 无重叠。[/*]
[*][b]ReturnToSender[/b] —— 它已经修复了调度器,因此该机制会停用,其余部分继续工作。[/*]
[*][b]EnRoute 和 BetterZeeRouter[/b] —— 两者都重做了路由 RPC 中继,因此当其中任一存在时,中继过滤和中继发送复用会停用,其他一切继续工作。[/*]
[*][b]Valheim Plus[/b] —— 它有自己的玩家上限,因此安装它时本模组的 [font=Courier New]Player Limit[/font] 设置会被忽略,以 V+ 的 [font=Courier New]maxPlayers[/font] 为准。[/*]
[*][b]ClientGhostWatchdog[/b] —— 它自行处理客户端侧的幽灵处理并针对自己的超时,因此本模组的客户端看门狗会停用,由该模组的行为接管。主机侧的那一半——将幽灵从所有权中驱逐,该模组不做这件事——无论哪种情况都继续运行。[/*]
[/list]
[line]
[size=5][b]致谢[/b][/size]
[list]
[*]断线幽灵处理来自 DreamWraith 的 [b][url=https://github.com/dreamwraith/Valheim-ClientGhostWatchdog]ClientGhostWatchdog[/url][/b]。[/*]
[*]ZDO 重定向来自 BetterZeeRouter。[/*]
[/list]
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。