概述
Decentraland 通信系统,简称 comms,是一个实时消息协议,负责处理 realm 中玩家之间的交互。
其中一些交互由玩家发起,另一些则由客户端在底层自动处理。以下是一些示例:
文字和语音聊天
玩家移动时的位置更新
玩家更改外观时的头像更新
由于这些功能大多需要向所有附近玩家广播消息,因此它们会自动按接近程度分组为名为 岛屿的群组。每位玩家在同一时间只会被分配到一个岛屿,随着他们在世界中移动以及相对其他玩家的位置变化,这一分配也会改变。
负责管理并将玩家分配到岛屿的 realm 服务称为 Archipelago。它负责在需要时创建岛屿,将其人口维持在合理数量,并根据玩家的移动动态重新分配玩家。
Unexpected error with integration mermaid: Integration is not installed on this space
当被分配到某个岛屿时,客户端会获得一个该岛屿专用的 URI,用于连接实际的后端,由后端在它们之间转发消息。该连接会一直持续,直到 Archipelago 将该客户端重新分配到另一个岛屿。
这意味着,除了 Archipelago 协议之外,客户端还必须实现若干 传输方式,每个都以统一接口封装一种受支持的后端。
客户端生命周期
comms 客户端的生命周期可以概括为以下几个步骤:
选择一个 realm:获取该 Archipelago 服务的 URI。
加入 Archipelago:与该服务建立持久连接。
获取岛屿(重新)分配:报告当前位置并获取一个岛屿专用的 URI。
连接传输方式:与该岛屿专用后端建立第二个连接。
重复:继续执行第 3 步和第 4 步,并定期报告新位置。
当客户端结束会话时,只需断开与 Archipelago 服务的连接即可。它们会被自动从当前岛屿中移除。
Unexpected error with integration mermaid: Integration is not installed on this space
连接
comms 连接主要基于 websocket,不过某些传输方式可能会使用其他策略。
前往 传输方式 或 Archipelago 部分了解更多信息,或查看某个特定传输方式页面获取详细内容。
认证
对 comms 的连接会通过让客户端对服务器提供的挑战进行签名来完成认证,所使用的方案见 认证链 部分。
前往 Archipelago 页面,或查看某个特定传输方式以了解更多有关认证流程的信息。
岛屿
岛屿是高度动态的玩家群组,成员之间可以相互广播消息,由 Archipelago 根据他们在世界中的移动而创建和维护。
岛屿没有预定义的区域或中心点。它们不是稳定的地理实体,而只是附近玩家的临时聚合。如果说某个岛屿覆盖了一个区域,那也只是因为其成员当前分布在该区域内。
在没有玩家的区域里可以没有任何岛屿,而在人口密集的区域则可能存在多个重叠的岛屿;如果把所有人都分到同一组,实时广播将变得不可能。
Decentraland 网络中的每台服务器都可以配置岛屿的最大人数,以及将玩家视为彼此接近的距离。默认情况下,岛屿最多可容纳 100 名彼此相距 100 米以内的玩家。
获取岛屿分配并加入岛屿的流程详见 Archipelago 部分。
消息
comms 协议中的消息是使用 协议缓冲区序列化的二进制数据块,并封装在 数据包 结构中。
存在多种不同的消息类型,用于各种实时交互流程。前往 消息 部分了解更多信息。
最后更新于