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

WebSocket

El transporte websocket es uno de los transportes de mensajería de la isla compatibles con el protocolo de comunicaciones de Decentraland. Los clientes deben usarlo cuando reciban una cadena de conexión apropiada de su realm Archipelago o si está indicado como un transporte fijo.

En el contexto del transporte websocket, una isla se denomina una sala. Ambos nombres indican lo mismo: un grupo de jugadores cercanos que intercambian actualizaciones y chat.

Las cadenas de conexión comienzan con el ws-room: prefijo, seguido de un wss:// URI para la sala específica. Se ven así:

ws-room:wss://comms.example.com/rooms/<room-id>

En ausencia de un protocolo explícito para la URI de websocket, wss:// se asume.

Conectando

El transporte usa el protocolo websocket estándar sobre HTTPS. Los clientes pueden abrir una conexión usando cualquier implementación estándar a su disposición.

Paquetes de websocket

Todos los mensajes del transporte websocket se serializan usando la WsPacket estructura. Implementan un conjunto de mensajes de conectividad y autenticación a nivel de protocolo, además de un tipo contenedor para mensajes del cliente.

El WsPacket estructura no debe confundirse con el mensaje [Packet][Packet]. Es una capa adicional de encapsulado específica del transporte websocket. Los mensajes reales de comms están contenidos en el WsPeerUpdate tipo.

Campo
Tipo
Valor

message

enum

Uno de WsIdentification, WsChallengeRequired, WsSignedChallenge, WsWelcome, WsPeerJoin, WsPeerLeave, WsKicked o WsPeerUpdate.

Autenticación

Antes de poder empezar a retransmitir mensajes a otros, los clientes deben autenticarse firmando una cadena de desafío. Esto se requiere incluso cuando la URI del transporte se obtuvo de Archipelago después de una ronda previa de autenticación.

El primer mensaje que un cliente envía al unirse a una isla es WsIdentification, que contiene una dirección pública. Se responderá con WsChallengeRequired, y los clientes envían un WsSignedChallenge en respuesta.

  .----------.                .--------.
  |  Servidor  |                | Cliente |
  '----+-----'                '---+----'
       ⋮                          |
       ⋮                  Conectar |
       o - - - - - - - - - - - - -|
       |                          |
       |                          |
       |         WsIdentification |
       |<-------------------------+
       +------------------------->|
       | WsChallengeRequired      |
       |                          |
       |                          |
       |        WsSignedChallenge |
       |<-------------------------+
       +------------------------->|
       | WsWelcome                |
       |                          |

Si el flujo se completa correctamente, el cliente recibirá un WsWelcome y podrá empezar a enviar mensajes a otros pares.


WsIdentification ↗ fuente

Campo
Tipo
Valor

address

string

La dirección pública de Ethereum del cliente


WsChallengeRequired ↗ fuente

Campo
Tipo
Valor

challenge_to_sign

string

La cadena proporcionada por el servidor que se firmará como prueba de identidad

already_connected

string

Una pista del servidor para los clientes, que indica que las conexiones anteriores pueden cerrarse.


WsSignedChallenge ↗ fuente

Campo
Tipo
Valor

auth_chain_json

string

Un cadena de autenticación que termina con la firma del desafío.


WsWelcome ↗ fuente

Campo
Tipo
Valor

alias

uint32

Un ID generado por el servidor para la sesión del cliente

peer_identities

map<uint32, string>

Las direcciones de todos los peers actuales, indexadas por alias

Conectividad

Se definen tres mensajes para ayudar a los clientes a hacer seguimiento de sus peers y de su propio estado.

WsPeerJoin se recibe cuando otro cliente se conecta a la sala y se autentica correctamente, mientras que WsPeerLeave se recibe cuando los peers se desconectan.

También existe el WsKicked mensaje, que informa a los clientes que su conexión está a punto de cerrarse y el motivo. En la práctica actual, la principal razón por la que un servidor puede expulsar a un cliente de una sala es porque se han conectado simultáneamente a otra sala, cuando eso está prohibido por la política del servidor.


WsPeerJoin ↗ fuente

Campo
Tipo
Valor

alias

uint32

El ID generado por el servidor enviado en WsWelcome

address

string

La dirección de Ethereum del nuevo peer


WsPeerLeave ↗ fuente

Campo
Tipo
Valor

alias

uint32

El ID generado por el servidor del peer desconectado


WsKicked ↗ fuente

Campo
Tipo
Valor

reason

string

La explicación del servidor de por qué se cerrará la conexión

Mensajes del cliente

Para enviar comms mensajes, los clientes los envuelven en la WsPeerUpdate estructura. Esto diferencia los tipos de mensajes de control del transporte de los mensajes reales enviados entre peers.


WsPeerUpdate ↗ fuente

Campo
Tipo
Valor

from_alias

uint32

El ID generado por el servidor del remitente

body

bytes

Serializado message siendo encapsulado

no fiable

bool

Si el remitente priorizó la velocidad o la fiabilidad al entregar este mensaje

Los clientes deben establecer el from_alias campo a 0 al enviar, y el servidor lo completará con el identificador correcto antes de entregarlo a los peers.

Última actualización