logo
Persistencia

Persistencia avanzada

Cómo Eco conserva objetos, RFC, datos de canal y estado para reconstruir una sesión.

Persistencia avanzada

La persistencia de Eco no consiste en hacer un Save() general de la escena. El servidor conserva determinadas operaciones y datos y puede reconstruir un canal a partir de ellos.

Estado persistente
├── Datos del servidor
├── Datos del canal
├── Datos del jugador
├── Objetos persistentes
└── RFC guardadas

Objetos persistentes

Al crear un objeto puedes marcarlo como persistente:

Eco.Instanciar(
    canalId,
    1,
    "MiPrefab",
    true,
    parametros);

La persistencia significa que el servidor conservará la información necesaria para reconstruir ese objeto cuando corresponda.

Persistencia no es sincronización continua

Un objeto persistente puede desaparecer visualmente de un cliente y reaparecer después. La persistencia describe cómo se reconstruye su existencia; la sincronización describe cómo se mantiene su estado durante la sesión.

RFC persistentes

Las RFC también pueden formar parte del estado persistente. Esto permite expresar el estado de un objeto como una secuencia de acciones reproducibles.

Creación

RFC de configuración

RFC de estado

Guardar

Cliente nuevo

Reproducir estado necesario

Existe además un patrón especialmente útil equivalente al antiguo NoneSaved: conservar la operación sin reenviarla inmediatamente a los clientes actuales.

Esto resulta apropiado para valores que pueden calcularse a partir del tiempo transcurrido, interpolación o estado base.

Orden de las RFC guardadas

Cuando se actualiza una RFC persistente, el orden de las operaciones guardadas importa. El servidor mantiene el orden adecuado para que la reconstrucción produzca el mismo estado lógico.

Canales persistentes

Un canal persistente puede sobrevivir aunque no queden jugadores conectados. Esto es distinto de un canal temporal:

TipoÚltimo jugador saleEstado
TemporalSe puede eliminarSe pierde con el canal
PersistentePermanecePuede restaurarse

Reducción de memoria

En servidores con muchos canales, mantener todas las representaciones activas puede ser costoso. El modelo heredado de TNet permite descargar el contenido de canales vacíos después de guardar su estado.

Canal vacío

Guardar

Descargar estado activo

Memoria reducida

Nuevo jugador

Recargar estado

El tiempo de carga aumenta a cambio de reducir memoria.

Exportar e importar objetos

El servidor puede exportar un grupo de objetos y recuperar posteriormente la información necesaria para recrearlo.

Eco.ExportarObjetos(objetos, datos =>
{
    // Guardar los datos exportados.
});

Y posteriormente:

Eco.ImportarObjetos(canalId, datos, ids =>
{
    // Objetos reconstruidos.
});

Esto es útil para plantillas complejas, vehículos configurados, grupos de entidades o prefabs cuyo estado inicial no conviene reconstruir manualmente.

Qué no debe guardarse aquí

No conviertas todo el estado de gameplay en RFC persistentes. Datos transitorios, efectos visuales o estados derivados suelen reconstruirse mejor desde una fuente persistente más pequeña.

Diseña el estado mínimo

La mejor persistencia es la que necesita almacenar la menor cantidad de información para reconstruir el mismo resultado.

Persistir una partida

Workflow práctico de persistencia.

Objetos

Modelo de identidad, canal y ciclo de vida de los objetos.

On this page