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 guardadasObjetos 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 necesarioExiste 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 sale | Estado |
|---|---|---|
| Temporal | Se puede eliminar | Se pierde con el canal |
| Persistente | Permanece | Puede 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 estadoEl 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.
