For the complete documentation index, see llms.txt. This page is also available as Markdown.

概述

Decentraland 通信系统,简称 comms,是一个实时消息协议,负责处理 realm 中玩家之间的交互。

其中一些交互由玩家发起,另一些则由客户端在底层自动处理。以下是一些示例:

  • 文字和语音聊天

  • 玩家移动时的位置更新

  • 玩家更改外观时的头像更新

你可以看到 comms 协议的实际运行,并使用开源的 Comms Station.

由于这些功能大多需要向所有附近玩家广播消息,因此它们会自动按接近程度分组为名为 岛屿的群组。每位玩家在同一时间只会被分配到一个岛屿,随着他们在世界中移动以及相对其他玩家的位置变化,这一分配也会改变。

负责管理并将玩家分配到岛屿的 realm 服务称为 Archipelago。它负责在需要时创建岛屿,将其人口维持在合理数量,并根据玩家的移动动态重新分配玩家。

Unexpected error with integration mermaid: Integration is not installed on this space

当被分配到某个岛屿时,客户端会获得一个该岛屿专用的 URI,用于连接实际的后端,由后端在它们之间转发消息。该连接会一直持续,直到 Archipelago 将该客户端重新分配到另一个岛屿。

这意味着,除了 Archipelago 协议之外,客户端还必须实现若干 传输方式,每个都以统一接口封装一种受支持的后端。

客户端生命周期

comms 客户端的生命周期可以概括为以下几个步骤:

  1. 选择一个 realm:获取该 Archipelago 服务的 URI。

  2. 加入 Archipelago:与该服务建立持久连接。

  3. 获取岛屿(重新)分配:报告当前位置并获取一个岛屿专用的 URI。

  4. 连接传输方式:与该岛屿专用后端建立第二个连接。

  5. 重复:继续执行第 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 协议中的消息是使用 协议缓冲区序列化的二进制数据块,并封装在 数据包 结构中。

当使用 message 一词来指代 comms 时,我们始终指的是二进制消息协议,而不是玩家之间交换的聊天消息。

存在多种不同的消息类型,用于各种实时交互流程。前往 消息 部分了解更多信息。

最后更新于