Skip to content

8 人及以上联机时部分玩家断连 #21

@RampageRain

Description

@RampageRain

问题现象

当前 mod 可以通过配置将联机房间人数上限提高到 16。

实际测试中,8 人可以进入游戏,但在进入游戏或大厅同步过程中,会稳定出现部分玩家丢失连接的问题,例如 8 人时固定有 3 名玩家断连。

这说明房间容量本身已经被提高,但部分官方网络消息在 8 人规模下仍可能存在序列化位宽不足的问题,导致客户端之间的同步数据不一致,最终表现为部分玩家断连。

初步分析

原版部分 Lobby 消息仍然使用 3 bits 来序列化玩家列表长度。

3 bits 可以表达的范围是 0-7。

需要注意的是,第 8 个玩家的 slotId 是 7,确实可以被 3 bits 表达;但大厅玩家列表长度会变成 8。

玩家列表长度是数量,不是从 0 开始的槽位下标,因此:

  • 7 人时,列表长度是 7,可以被 3 bits 表达
  • 8 人时,列表长度是 8,已经超出 3 bits 的表达范围

如果某个 Lobby 同步消息仍然使用 3 bits 读写玩家列表长度,就可能导致网络包序列化/反序列化异常或数据错位,从而造成部分客户端断连。

预期修复方向

将官方 Lobby 消息中的玩家列表长度序列化从 3 bits 扩展到更大的位宽,并尽量覆盖所有官方 Lobby 消息,而不是只 patch 少数已知消息。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions