Pod maską BeiDou-Server: Nowoczesne podejście do emulacji serwera MapleStory z Java 21
Ci, którzy pamiętają złotą erę klientowych MMORPG-ów z końca lat 2000., prawdopodobnie znają MapleStory. W szczytowym momencie ta dwuwymiarowa gra typu grinding przyciągnęła ogromną społeczność fanów. Prywatne serwery w tamtych czasach były tworzone na piechotę: pobierz kod źródłowy OdinMS lub HeavenMS, nałóż masę łatek dla Java 6, ręcznie zaimportuj ogromny zrzut bazy danych przez starą wersję Navicat i módl się, żeby nie zawiesiła się w momencie, gdy połączy się stu graczy.
Większość tych emulatorów utknęła w piętnastoletnim legacy code. Twórcy projektu BeiDou-Server postanowili pójść inną drogą. Budując na projekcie Cosmic, postawili sobie za cel przepisanie i optymalizację kodu po stronie serwera przy użyciu nowoczesnego stacka technologicznego: JDK 21, MySQL 8, REST API ze Swaggerem oraz odizolowany frontend Node.js do administracji.
Z czego składa się architektura BeiDou-Server
Projekt podzielony jest na dwa główne komponenty: backend gms-server odpowiedzialny za logikę gry i API oraz interfejs webowy gms-ui. Twórcy zrezygnowali ze wsparcia dla starszych wersji MySQL — wymagana jest wersja 8.0 lub wyższa.
Najmilej zaskakuje automatyzacja rutynowych zadań przy pierwszym uruchomieniu. Serwer automatycznie sprawdza wymagany schemat w DBMS, tworzy tabele i stosuje początkowe skrypty SQL. Nie trzeba już instalować zewnętrznych narzędzi do importu bazy danych.
Główne cechy architektury backendu
- Migracja do OpenJDK 21. Użycie najnowszej wersji Java umożliwiło eliminację przestarzałych konstrukcji i zastosowanie nowoczesnych funkcji języka przy obsłudze pakietów sieciowych i zarządzaniu pamięcią.
- REST API na porcie 8686. Twórcy zintegrowali Swagger UI, który jest dostępny od razu po uruchomieniu serwisu. Znacznie upraszcza to debugowanie i integrację z zewnętrznymi serwisami.
- Wersjonowanie endpointów. W projekcie zaimplementowano czytelny schemat wersjonowania API poprzez stałą
ApiConstant.LATEST. Jeśli metoda nie zmieniła się w nowej wersji aplikacji, nie trzeba jej duplikować — routing automatycznie przekierowuje żądania do aktualnego kontrolera. - Wielojęzyczny silnik zasobów. Serwer może dynamicznie ładować zlokalizowane dane gry i skrypty z różnych katalogów (na przykład
wz-zh-CNdla chińskiego lubscript-en-USdla angielskiego).
Panel administracyjny i obsługa grafik
Interfejs gms-ui zbudowany jest na Node.js v20.15.0 z menedżerem pakietów Yarn. W przeciwieństwie do starych emulatorów, gdzie panel admina był chaosem formularzy Swing w samym serwerze, tutaj panel jest w pełni webowy.
Problem przechowywania i wyświetlania tysięcy sprite'ów przedmiotów, potworów i grafik map został rozwiązany elegancko. Aby uniknąć rozdęcia repozytorium gigabajtami zasobów graficznych, panel webowy pobiera obrazy bezpośrednio przez zewnętrzne API serwisu maplestory.io.
Wdrażanie kontenerowe i zarządzanie
Wdrażanie i praca z kontenerami
Wcześniej konfiguracje Dockera znajdowały się bezpośrednio w głównym repozytorium, ale z czasem autorzy przenieśli wszystko związane z konteneryzacją do osobnego projektu BeiDou-docker. Gotowy obraz beidou-server-all jest już dostępny w GitHub Packages, więc można wdrożyć środowisko testowe w zaledwie kilka minut bez kompilowania ze źródeł.
Do lokalnego developmentu potrzebny będzie standardowy zestaw narzędzi:
- OpenJDK 21
- IntelliJ IDEA 2023.3 lub nowszy
- MySQL 8 DBMS
- Git i Maven
Wstępnie zbudowane binarki serwera i klienty są dostępne w sekcji Releases, a dla chętnych do testowania eksperymentalnych buildów jest osobna gałąź z wczesnymi wersjami beta.
Potencjalne wyzwania, z którymi można się spotkać
Głównym zastrzeżeniem BeiDou-Server jest bariera językowa. Projekt jest tworzony przez społeczność chińskojęzyczną, więc większość komentarzy w kodzie, dyskusji nad issue'ami i stron Wiki jest napisana po chińsku.
Jednak dzięki Swaggerowi i przejrzystej strukturze katalogów nawigacja po kodzie stała się znacznie łatwiejsza nawet bez znajomości języka. Co więcej, autorzy udostępnili Wiki projektu w pełni do edycji społecznościowej, więc dokumentacja jest stopniowo uzupełniana również po angielsku.
Kto może być zainteresowany tym projektem
BeiDou-Server to świetny przykład tego, jak entuzjaści przekształcają potworny legacy code ze starej gry online w zrozumiały projekt z nowoczesnym stackiem.
Jeśli interesuje Cię gamedev, chcesz poznać działanie sieciowych protokołów MMORPG, zobaczyć prawdziwe przykłady organizacji wielowersyjnego REST API w Javie lub po prostu odczuwasz nostalgię za starymi grami — ten kod źródłowy zdecydowanie warto sprawdzić.
Powiązane projekty