otra idea de actualización en caliente modular


title: other-Modular Hot Update Ideas
categorías: Otros
etiquetas: [Hot Update, Modular, Subcontract]
fecha: 2023-02-18 01:04:57
comentarios: false
mathjax: true
toc: true

revisión modular


Registre superficialmente que la visita rompió 200w (Pero, no me importa esto).

imagen-20230218004545551


precuela

  • Solo hable de ideas, no publique código de implementación.

necesidad

  • El tipo de juego pertenece a la categoría de colección, es decir, un lobby + múltiples módulos de minijuegos, y cada módulo de minijuegos no está relacionado entre sí. Si no hay una actualización en caliente modular, el tamaño del paquete inicial será grande, y a medida que los módulos de minijuegos aumentan la cantidad de módulos de juego, por lo que se puede considerar dividir cada módulo de juego pequeño y actualizarlo cuando sea necesario, entonces el tamaño del paquete inicial es solo un lobby, o preestablece varios pequeños módulo de juegos, otros módulos de minijuegos se actualizan cuando se están ejecutando, por lo que el cuerpo del paquete no estará limitado por los módulos de minijuegos.

tren de pensamiento

Los recursos en el juego son principalmente recursos artísticos, como texturas, y los recursos de script y las tablas de configuración son muy pequeños, por lo que solo necesita lidiar con los recursos artísticos.

Embalar

  1. En el pasado, todavía es cómo jugar el parche. Solo necesita hacer una copia del parche para empaquetar al final del paquete y eliminar los recursos de arte de cada módulo de juego pequeño, dejando solo los recursos de arte del módulo de lobby Los recursos del módulo generan una tabla de registro de base de datos, que registra todos los recursos del módulo eliminado, y cada módulo tiene un registro de base de datos, como:

    imagen-20230217180029207

    Cada db (1001.db, 1002.db, 1003.db, ...) se eliminan los registros de la tabla de registros, es decir, los recursos que necesitan actualizarse, como: 1003.db

    imagen-20230217180238302


Relación de referencia de recursos

Debido a que el módulo puede no existir, se deben cumplir algunas condiciones entre la sala y el módulo, como se muestra en la figura:

imagen-20230217181443278

  1. El lobby (lobby) solo puede referirse a los recursos del lobby, no a los recursos del módulo
  2. Los módulos (mod01, mod02) pueden referirse a recursos del mismo módulo y lobby, pero no pueden referirse a recursos de otros módulos

La lógica de detección de la relación de referencia debe pasar antes de la lógica de empaquetado y parcheo para garantizar que no haya ningún problema.


Módulos de actualización en caliente en tiempo de ejecución

Supongamos que el último archivo de registro de base de datos es 1003.db, entonces puede usar un registro de base de datos como old_1003.db para registrar los recursos locales antiguos

  1. Antes de ingresar al lobby, el lobby se actualizará primero. En este momento, se descargará la tabla de registro 1003.db del recurso del módulo y se sobrescribirá la anterior.
  2. Luego, antes de ingresar al módulo 1003, primero compare si los valores md5 de 1003.db y old_1003.db son consistentes
    1. Si no es consistente, significa que necesita actualizar los recursos del nuevo módulo 1003 en este momento, descargar los recursos con diferencias md5, escribirlo después de completarlo y usar 1003.db para sobrescribir old_1003.db para completar la actualización del módulo
    2. Si es consistente, esto significa que no es necesario actualizar ningún recurso.

mejoramiento

  1. Porque la velocidad de actualización de un solo archivo es más rápida que la actualización por lotes de archivos masivos en la mayoría de los casos.

    Al actualizar el módulo en caliente por primera vez, puede empaquetar los recursos del módulo en un archivo zip, descargarlo y descomprimirlo localmente, que contiene la tabla de registro de recursos old_1003.db y los archivos que deben actualizarse en caliente.


Paso en el hoyo

  1. En la plataforma Android, si el archivo en el paquete no existe, copie el archivo inexistente en la ruta persistente, se copiará con éxito, pero será un archivo vacío, por lo que el archivo leído debe considerarse vacío. (ha sido engañado durante decenas de minutos).

Supongo que te gusta

Origin blog.csdn.net/yangxuan0261/article/details/129095858
Recomendado
Clasificación