>_ DevTrendses

Idioma

Inicio

Lenguajes

Secciones

Frontend Backend Móvil DevOps AI / ML GameDev Blockchain Embebidos Seguridad
JavaScript

Bajo el capó de BeiDou-Server: Un enfoque moderno de la emulación de servidores MapleStory con Java 21

Quienes presenciaron la edad dorada de los MMORPGs del lado del cliente a finales de la década de 2000 probablemente recuerdan MapleStory. En su apogeo, este juego de molienda 2D generó una enorme comunidad de fans. Los servidores privados de entonces eran improvisados: tomar el código fuente de OdinMS o HeavenMS, aplicar un conjunto de parches para Java 6, importar manualmente una base de datos masiva a través de alguna versión antigua de Navicat, y esperar que no se caiga en el momento en que cien jugadores se conecten.

La mayoría de estos emuladores se quedaron atrapados en código heredado de quince años. Los desarrolladores del proyecto BeiDou-Server decidieron tomar un enfoque diferente. Construyendo sobre el proyecto Cosmic, se propusieron reescribir y optimizar el código del lado del servidor usando un stack tecnológico moderno: JDK 21, MySQL 8, REST API con Swagger, y un frontend Node.js aislado para administración.

De qué consiste la arquitectura de BeiDou-Server

El proyecto se divide en dos componentes principales: el backend gms-server, responsable de la lógica del juego y la API, y la interfaz web gms-ui. Los desarrolladores eliminaron el soporte para versiones antiguas de MySQL — se requiere la versión 8.0 o superior para ejecutar.

La sorpresa más agradable al observar el código por primera vez es la automatización de tareas rutinarias en el primer inicio. El servidor verifica automáticamente el esquema requerido en el DBMS, crea las tablas y aplica los scripts SQL iniciales. Ya no es necesario instalar utilidades de terceros para importar la base de datos.

Características destacadas de la arquitectura del backend

  • Migración a OpenJDK 21. Usar la última versión de Java permitió eliminar construcciones obsoletas y aplicar características modernas del lenguaje al manejar paquetes de red y gestión de memoria.
  • REST API en el puerto 8686. Los desarrolladores integraron Swagger UI, que está disponible inmediatamente después de iniciar el servicio. Esto simplifica enormemente la depuración y la integración con servicios externos.
  • Versionado de endpoints. El proyecto implementa un esquema limpio de versionado de API a través de la constante ApiConstant.LATEST. Si un método no ha cambiado en la nueva versión de la aplicación, no hay necesidad de duplicarlo — el enrutamiento redirige automáticamente las solicitudes al controlador actual.
  • Motor de recursos multilingüe. El servidor puede cargar dinámicamente datos del juego y scripts localizados desde diferentes directorios (por ejemplo, wz-zh-CN para chino o script-en-US para inglés).

Panel de administración web y manejo de gráficos

La interfaz gms-ui está construida en Node.js v20.15.0 usando el gestor de paquetes Yarn. A diferencia de los emuladores antiguos donde el panel de administración era un desastre de formularios Swing dentro del propio servidor, aquí el panel es completamente basado en web.

El problema de almacenar y mostrar miles de sprites de objetos, monstruos y gráficos de mapas se resuelve de manera elegante. Para evitar hinchar el repositorio con gigabytes de activos gráficos, el panel web solicita las imágenes directamente a través de la API externa del servicio maplestory.io.

Despliegue y gestión de contenedores

Despliegue y trabajo con contenedores

Anteriormente, las configuraciones de Docker vivían directamente en el repositorio principal, pero con el tiempo los autores movieron todo lo relacionado con la contenedorización a un proyecto separado BeiDou-docker. Una imagen lista para usar beidou-server-all ya está disponible en GitHub Packages, así que puedes desplegar un entorno de pruebas en solo un par de minutos sin compilar desde el código fuente.

Para desarrollo local, necesitarás el conjunto de herramientas estándar:

  • OpenJDK 21
  • IntelliJ IDEA 2023.3 o más reciente
  • MySQL 8 DBMS
  • Git y Maven

Los binarios del servidor precompilados y los clientes están disponibles en la sección Releases, y para quienes quieran probar versiones experimentales, hay una rama separada con versiones beta tempranas.

Posibles desafíos que puedes encontrar

La principal advertencia de BeiDou-Server es la barrera del idioma. El proyecto es creado por una comunidad de habla china, por lo que la mayoría de los comentarios del código, las discusiones de issues y las páginas Wiki están escritas en chino.

Sin embargo, con Swagger y una estructura de directorios clara, navegar por el código se ha vuelto mucho más fácil incluso sin conocimiento del idioma. Además, los autores hicieron que la Wiki del proyecto estuviera completamente abierta para edición comunitaria, por lo que la documentación se está complementando gradualmente también en inglés.

A quién podría interesarle este proyecto

BeiDou-Server es un gran ejemplo de cómo los entusiastas transforman código heredado monstruoso de un juego online antiguo en un proyecto comprensible con un stack moderno.

Si te interesa el desarrollo de juegos, quieres explorar cómo funcionan los protocolos de red de los MMORPG, ver ejemplos reales de organización de REST API con múltiples versiones en Java, o simplemente sientes nostalgia por los juegos antiguos — definitivamente vale la pena revisar este código fuente.

Proyectos relacionados