>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
JavaScript

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-CN dla chińskiego lub script-en-US dla 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