Sotto il cofano di BeiDou-Server: una visione moderna dell'emulazione server MapleStory con Java 21
Chi ha assistito all'età d'oro dei MMORPG client-side alla fine degli anni 2000 probabilmente ricorda MapleStory. Al suo apice, questo gioco di grinding 2D ha generato un'enorme community di fan. I server privati di allora erano messi insieme in modo approssimativo: prendere il codice sorgente di OdinMS o HeavenMS, applicare una serie di patch per Java 6, importare manualmente un enorme dump del database attraverso qualche vecchia versione di Navicat, e sperare che non vada in crash nel momento in cui si connettono un centinaio di giocatori.
La maggior parte di questi emulatori è rimasta bloccata in codice legacy vecchio di quindici anni. Gli sviluppatori del progetto BeiDou-Server hanno deciso di seguire un approccio diverso. Basandosi sul progetto Cosmic, si sono posti l'obiettivo di riscrivere e ottimizzare il codice lato server utilizzando uno stack tecnologico moderno: JDK 21, MySQL 8, REST API con Swagger e un frontend Node.js isolato per l'amministrazione.
Di cosa si compone l'architettura di BeiDou-Server
Il progetto è suddiviso in due componenti principali: il backend gms-server, responsabile della logica di gioco e dell'API, e l'interfaccia web gms-ui. Gli sviluppatori hanno eliminato il supporto per le versioni precedenti di MySQL — è richiesta la versione 8.0 o superiore per l'esecuzione.
La sorpresa più piacevole quando si guarda per la prima volta il codice è l'automazione delle operazioni routine al primo avvio. Il server controlla automaticamente se lo schema richiesto è presente nel DBMS, crea le tabelle e applica gli script SQL iniziali. Non è più necessario installare utility di terze parti per l'importazione del database.
Caratteristiche principali dell'architettura backend
- Migrazione a OpenJDK 21. L'utilizzo dell'ultima versione di Java ha reso possibile eliminare i costrutti obsoleti e applicare funzionalità moderne del linguaggio nella gestione dei pacchetti di rete e della memoria.
- REST API sulla porta 8686. Gli sviluppatori hanno integrato Swagger UI, disponibile immediatamente dopo l'avvio del servizio. Questo semplifica notevolmente il debugging e l'integrazione con servizi esterni.
- Versioning degli endpoint. Il progetto implementa uno schema pulito di versioning delle API attraverso la costante
ApiConstant.LATEST. Se un metodo non è cambiato nella nuova versione dell'applicazione, non c'è bisogno di duplicarlo — il routing reindirizza automaticamente le richieste al controller corrente. - Motore di risorse multilingua. Il server può caricare dinamicamente dati di gioco e script localizzati da directory diverse (ad esempio,
wz-zh-CNper il cinese oscript-en-USper l'inglese).
Pannello di amministrazione web e gestione della grafica
L'interfaccia gms-ui è costruita su Node.js v20.15.0 utilizzando il gestore di pacchetti Yarn. A differenza dei vecchi emulatori dove il pannello admin era un caos di form Swing all'interno del server stesso, qui il pannello è completamente basato sul web.
Il problema di archiviare e visualizzare migliaia di sprite di oggetti, mostri e grafica delle mappe è risolto in modo elegante. Per evitare di appesantire il repository con gigabyte di asset grafici, il pannello web richiede le immagini direttamente attraverso l'API esterna del servizio maplestory.io.
Distribuzione container e gestione
Distribuzione e lavoro con i container
In precedenza, le configurazioni Docker vivevano direttamente nel repository principale, ma col tempo gli autori hanno spostato tutto ciò che riguarda la containerizzazione in un progetto separato BeiDou-docker. Un'immagine pronta beidou-server-all è già disponibile in GitHub Packages, quindi puoi distribuire un ambiente di test in soli un paio di minuti senza compilare dal codice sorgente.
Per lo sviluppo locale, avrai bisogno del set di strumenti standard:
- OpenJDK 21
- IntelliJ IDEA 2023.3 o più recente
- MySQL 8 DBMS
- Git e Maven
I binari del server precompilati e i client sono disponibili nella sezione Releases, e per chi vuole testare build sperimentali, c'è un branch separato con le prime versioni beta.
Possibili difficoltà che potresti incontrare
La principale limitazione di BeiDou-Server è la barriera linguistica. Il progetto è creato da una community di lingua cinese, quindi la maggior parte dei commenti nel codice, delle discussioni sulle issue e delle pagine Wiki sono scritte in cinese.
Tuttavia, con Swagger e una struttura delle directory chiara, navigare nel codice è diventato molto più facile anche senza conoscenza della lingua. Inoltre, gli autori hanno reso il Wiki del progetto completamente aperto alle modifiche della community, quindi la documentazione viene gradualmente integrata anche in inglese.
A chi potrebbe interessare questo progetto
BeiDou-Server è un ottimo esempio di come gli appassionati trasformino codice legacy mostruoso di un vecchio gioco online in un progetto comprensibile con uno stack moderno.
Se ti interessa lo sviluppo di giochi, vuoi esplorare come funzionano i protocolli di rete degli MMORPG, vedere esempi reali di organizzazione di REST API multi-versione in Java, o semplicemente provi nostalgia per i vecchi giochi — questi codici sorgente valgono sicuramente la pena di essere controllati.
Progetti correlati