Descripción general

El sistema de comunicaciones de Decentraland, o simplemente comms, es el protocolo de mensajería en tiempo real que gestiona la interacción entre jugadores en un realm.

Algunas de estas interacciones son iniciadas por los jugadores, otras son manejadas automáticamente por los clientes en segundo plano. Algunos ejemplos:

  • Chat de texto y voz

  • Actualizaciones de posición a medida que los jugadores se mueven

  • Actualizaciones del avatar cuando los jugadores cambian su apariencia

circle-info

Puedes ver el protocolo de comms en acción y experimentar con él usando el Comms Stationarrow-up-right.

Dado que la mayor parte de esta funcionalidad requiere difundir mensajes a todos los jugadores cercanos, se agrupan automáticamente en clústeres basados en la proximidad llamados islands. Cada jugador es asignado a una sola island a la vez, la cual cambia a medida que viajan por el mundo y se mueven en relación con otros.

El servicio del realm que gestiona y asigna jugadores a islands se llama Archipelago. Se encarga de crear islands según se necesiten, mantener su población en un número razonable y reasignar dinámicamente a los jugadores en respuesta a sus movimientos.

spinner

Cuando se asigna a una island, a los clientes se les proporciona un URI específico de la island para conectarse al backend real que retransmitirá mensajes entre ellos. Esta conexión dura hasta que Archipelago reasigna al cliente a una island diferente.

Esto significa que, además del Archipelagoarrow-up-right protocolo, los clientes deben implementar una serie de transports, cada uno envolviendo uno de los backends soportados en una interfaz unificada.

Ciclo de vida del cliente

El ciclo de vida de un cliente de comms puede resumirse en unos pocos pasos:

  1. Seleccionar un realm: obtener un URI para el Archipelagoarrow-up-right servicio.

  2. Unirse a Archipelago: abrir una conexión persistente con el servicio.

  3. Obtener una (re)asignación de island: reportar la posición actual y obtener un URI específico de la island.

  4. Conectar un transport: abrir una segunda conexión con el backend específico de la island.

  5. Repetir: continuar con los pasos 3 y 4, reportando periódicamente nuevas posiciones.

Cuando el cliente termina su sesión, simplemente se desconecta del servicio Archipelago. Será eliminado automáticamente de su island actual.

spinner

Conexiones

Las conexiones de comms son principalmente basadas en WebSocket, aunque algunos transports pueden usar otras estrategias.

Ve a la Transportsarrow-up-right o Archipelagoarrow-up-right secciones para aprender más, o una página de transport específica para detalles sobre el mismo.

Autenticación

Las conexiones a comms se autentican haciendo que los clientes firmen un desafío proporcionado por el servidor, usando el esquema descrito en el auth chainarrow-up-right sección.

Dirígete a la Archipelagoarrow-up-right página o consulta un transport específico para aprender más sobre los flujos de autenticación.

Islas

Las islands son grupos de jugadores altamente dinámicos que pueden transmitir mensajes entre sí, creadas y mantenidas por Archipelagoarrow-up-right en respuesta a sus movimientos en el mundo.

No existe un área predefinida ni un punto central para una island. No son características geográficas estables, solo asociaciones temporales de jugadores cercanos. Si se puede decir que una island cubre una región, es solo porque sus miembros están actualmente dispersos en esa zona.

Puede no haber islands en una región sin jugadores, y varias islands superpuestas en áreas densamente pobladas, donde asignar a todos al mismo grupo haría imposible la difusión en tiempo real.

Cada servidor en la red de Decentraland puede configurar la población máxima de una island y la distancia a la que los jugadores se consideran cercanos. Por defecto, las islands pueden albergar hasta 100 jugadores dentro de 100 metros entre sí.

El flujo para ser asignado a una island y unirse a ella se detalla en el Archipelagoarrow-up-right sección.

Mensajes

Los mensajes en el protocolo de comms son blobs binarios serializados usando protocol buffersarrow-up-right, envueltos en una Elarrow-up-right estructura.

circle-info

Cuando usamos la palabra message en el contexto de comms, siempre nos estaremos refiriendo al protocolo de mensajes binario, no a los mensajes de chat intercambiados entre jugadores.

Hay varios tipos de mensajes diferentes, para una variedad de flujos de interacción en tiempo real. Dirígete a la messagesarrow-up-right sección para aprender más.

Última actualización