VulCode

Java: co w nim budujemy i dlaczego

Javę piszemy przede wszystkim do Minecrafta: pluginy na Paper, Purpur i Folia. Poza grami używamy jej w usługach na Spring Boot.

Kiedy Java, a kiedy coś innego

Technologia ma pasować do miejsca, w którym kod będzie działał, i do zespołu, który go przejmie. Ostateczny wybór zapada przy wycenie, razem z Tobą.

Wybieramy Java

Pluginy na Paper, Purpur i Folię

Frozcraft działa na Paperze i Folii z jednego kodu. Akcja dotycząca gracza wykonuje się na wątku jego regionu, więc plugin nie wiesza serwera.

Dostawy ze sklepu do gry

Frozcraft odbiera zakupy ze sklepu Flaem przez gniazdo Unix i wydaje je graczom w grze. Gniazdo jest dostępne tylko na tej maszynie, więc plugin nie otwiera portu do internetu.

Zapytania poza wątkiem gry

Plugin zbiera statystyki graczy i wykonuje na nich akcje. Zapytania HTTP trafiają na wirtualne wątki Javy, nigdy na wątek, który liczy ticki serwera.

Dodatki instalowane u klientów hostingu

Dodatki Flaem instalują się na serwerach gier klientów hostingu. Taki serwer i tak działa na Javie, więc dodatek to jeden plik jar bez dodatkowego środowiska.

Rezerwacje bez podwójnych terminów

slotline rezerwuje sale, korty i sprzęt na Spring Boot z PostgreSQL. Blokada zasobu w transakcji i test współbieżności pilnują, żeby jednego terminu nie zajęły dwie osoby naraz.

Usługi z udokumentowanym API

W slotline migracje Flyway i dokumentacja springdoc-openapi powstają razem z kodem, a dostęp chroni Spring Security z tokenami JWT. Spring Boot zna wielu programistów, więc usługę łatwo przekazać dalej.

Tak piszemy w usługach

Wybieramy coś innego

Małe skrypty i boty

Skrypt na serwer i bot Discord w Pythonie są gotowe szybciej i nie potrzebują JVM. Javę zostawiamy tam, gdzie wymaga jej gra albo duża usługa.

Agent działający w tle

JVM potrzebuje czasu na rozgrzanie i zajmuje pamięć, zanim zrobi cokolwiek. Agenta na cudzej maszynie piszemy w Go, jako jeden mały plik.

Panel do zarządzania serwerem

Ekrany zarządzania serwerem gry piszemy w React i TypeScripcie, a plugin w Javie tylko wykonuje polecenia w grze. Interfejs nie siedzi w kodzie serwera.

Nowa usługa na JVM

Gdy usługa na JVM nie jest pluginem do gry, rozważamy Kotlin: puste wartości widać w typach, a kod jest krótszy przy tych samych bibliotekach.

Pluginy do SCP: Secret Laboratory

SCP: Secret Laboratory jest napisane w C# na Unity, więc jego pluginy piszemy w C#. Java zostaje przy Minecrafcie.

Rdzeń platformy hostingowej

Sklep, rozliczenia i orkiestracja węzłów Flaem są w Ruście, a Java pracuje tylko w grze. Rdzeń ma działać latami bez pauz na odśmiecanie pamięci, a Rust nie ma odśmiecacza.

Java w porównaniu, punkt po punkcie

Każda potrzeba w jednym wierszu, a obok siebie to, co w tej sprawie daje każda z dwóch kolumn.

ProjektJavaKotlin

Plugin Minecraft

Najwięcej przykładów i bibliotek
Też działa

Nowa usługa na JVM

Spring Boot
Krótszy kod

Puste wartości

Optional i adnotacje, bez gwarancji kompilatora
Rozróżnione w typach

Dokumentacja Papera i Folii

Pisana z myślą o Javie
Przykłady trzeba przekładać

Współbieżność

Wirtualne wątki
Korutyny

Rozmiar pluginu

Mały jar bez dodatków
Większy, z biblioteką standardową Kotlina

Ludzie do utrzymania

Najłatwiej o zespół
Mniej osób, ale Javę czytają bez trudu

Java w całym naszym kodzie

Ile linii napisaliśmy w Java i jaką część wszystkiego, co napisaliśmy, to stanowi. Liczymy linie dodane w commitach naszych repozytoriów, osobno dla każdego języka.

13 788
linii napisanych w Java
0,3%
wszystkich linii, które napisaliśmy
3
repozytoria z kodem w Java
20.
miejsce wśród 26 języków

Biblioteki, na których stoją te projekty

Z plików zależności naszych repozytoriów. Przy każdej jedno zdanie o tym, do czego jej używamy.

Serwer Minecraft w panelu Flaem: zużycie zasobów, konsola na żywo i gracze
Zaproszenie na serwer Minecraft w aplikacji Flaem: adres serwera i jak dołączyć
  • Paper API

    Pluginy Minecraft.

  • Gradle

    Budowanie pluginów.

  • Spring Boot, JPA, Flyway

    Usługa rezerwacji.

  • springdoc-openapi

    Dokumentacja API.

Inne technologie i gdzie działa ich kod

Każda ma swoją stronę z projektami na prawdziwych ekranach i porównaniem z alternatywami.

Strony i aplikacje webowe

To, co widać w przeglądarce, i jego zaplecze.

Aplikacje mobilne

Natywne klienty Android i iOS.

Aplikacje desktopowe

Programy na Windows, macOS i Linux bez przeglądarki w środku.

Backend i infrastruktura

Rdzenie, agenty na serwerach i usługi czasu rzeczywistego.

Boty i automatyzacje

Discord, skrypty i monitoring.

Pytania o Java

Odpowiedzi o Java, naszych projektach i liczbach na tej stronie.

Projekt w Java?

Opisz, co chcesz zbudować. Odpiszemy w godzinę i powiemy wprost, czy ta technologia jest dobrym wyborem.