A Java és a Spring Boot kombinációja már hosszú évek óta stabil pillére a nagyvállalati backendfejlesztésnek. De mi történik akkor, ha nemcsak REST API-kon keresztül szeretnénk adatokat kiszolgálni, hanem valós idejű információt is szeretnénk megjeleníteni a felhasználóknak? Ekkor lép színre a WebSocket és a STOMP.
Ebben a cikkben bemutatjuk, hogyan működik a WebSocket-es kommunikáció Spring Boot alatt, mikor érdemes használni, és milyen előnyei vannak a STOMP protokollnak. Két valósághű példán keresztül építjük fel a témát: egy üzenetküldő chat modult és egy valós idejű járatkésés értesítő rendszert.
A következőkben bemutatott példákat és részletes magyarázatokat megtalálod a kurzus vonatkozó videós leckéiben is, ahol lépésről lépésre végigvezetünk a megvalósításon:
A WebSocket működésének alapjai
A WebSocket célja az, hogy kétirányú, perzisztens kapcsolatot biztosítson kliens és szerver között. Ez azt jelenti, hogy nem kell újra és újra HTTP kéréseket küldeni, hanem a felek egy nyitott „csatornán” keresztül kommunikálnak.
A kapcsolat felépítése egy handshake-kel kezdődik: a kliens egy speciális HTTP kéréssel jelzi, hogy szeretne WebSocket módba váltani. Ha a szerver ezt elfogadja, a kapcsolat átvált „nyers” WebSocket kommunikációra – ahol már nincs HTTP fejlécek sora, csak szöveges vagy bináris üzenetek gyors áramlása.
A WebSocket URI-ja eltér a megszokott HTTP-től: ws:// vagy wss:// sémával kezdődik (az utóbbi a biztonságos verzió).
A kliens oldali JavaScript kód így nézhet ki:
Ez a modell ideális például chat alkalmazásokhoz, játékokhoz, valós idejű értesítésekhez.
Mire való a WebSocket, és mi a gond a HTTP-vel?
A HTTP protokoll egy kérés-válasz modellen alapul: a kliens (böngésző vagy app) kérdez, a szerver válaszol. Ez jól működik REST API-k esetén, de mi van akkor, ha a szerver szeretne elsőként szólni a kliensnek?
Például:
- frissítés érkezik egy dashboardon
- új üzenetet küldenek egy chatben
- riasztást kap egy monitoring rendszer
A WebSocket ezt a korlátot oldja fel: állandó, kétoldalú kapcsolatot biztosít a kliens és a szerver között, így bármelyik fél bármikor kezdeményezhet kommunikációt. Ehhez először egy „handshake” történik, ahol a kliens jelzi, hogy WebSocket kapcsolatot szeretne létesíteni. Ha a szerver ezt elfogadja, megnyílik az adatcsatorna.
WebSocket támogatás Spring Boot-ban
A Java világában több megközelítés is létezik a WebSocket kezelésére, de a Spring saját implementációja, a Spring WebSocket, különösen integrált és rugalmas megoldást kínál.
A legalapvetőbb megvalósításhoz egy WebSocketHandler interfészt kell implementálnunk. Ha szöveges üzeneteket kezelünk, a TextWebSocketHandler osztályból öröklünk:
Ezt követően regisztrálni kell ezt a handlert egy konfigurációs osztályban:
Mi az a STOMP, és miért érdemes használni?
A WebSocket alapvetően szabad formátumú kommunikációt tesz lehetővé – nincs benne semmilyen szabály arra, hogy milyen típusú üzenetek érkeznek, milyen struktúrával. Ezt oldja meg a STOMP protokoll (Simple Text-Oriented Messaging Protocol), amely egyfajta „levelezési szabályzatot” ad a WebSocket fölé.
A STOMP segítségével például egy kliens nemcsak egyszerű üzenetet küldhet, hanem:
- feliratkozhat különböző topikokra (/topic/messages)
- üzeneteket küldhet logikai végpontokra (/app/chat)
- könnyebben integrálható Spring Security-vel vagy üzenetsorokkal (pl. RabbitMQ)
A Spring Boot támogatja a STOMP-ot, és rendkívül egyszerűen használható.
STOMP alapú chat alkalmazás Spring Boot-ban
1. DTO-k: Üzenetek reprezentálása
2. Kontroller
A @MessageMapping az üzenet beérkezési pontját jelöli, a @SendTo pedig megmondja, hogy hova küldje a választ – jelen esetben az összes feliratkozott kliensnek.
3. Konfiguráció
A SockJS biztosítja a kompatibilitást olyan kliensekkel is, amelyek nem támogatják a WebSocket-et.
Haladó példa: valós idejű járatfrissítés
Képzeljük el, hogy egy repülőjárat-kereső alkalmazást készítünk. A felhasználók épp egy listaoldalon böngésznek a járatok között, amikor egy új információ (pl. késés) jelenik meg. Ezt valós időben szeretnénk közölni velük – csak azokkal, akik az adott járatot látják.
Ehhez REST és WebSocket/STOMP kombinációját használjuk.
REST végpont
WebSocket konfiguráció
DelayMessage osztály
Frontend (Angular példával)
- A kliens a REST API-n keresztül lekéri a járatokat
- Majd minden járatra feliratkozik a /topic/delay/{id} topikra
- Ha bármelyik járat késéséről érkezik üzenet, automatikusan frissíti a felületen
Ez a modell kifejezetten hasznos ott, ahol a skálázhatóság, valós idejűség és szerveroldali események fontosak.
Miért fontos ez a tudás?
A valós idejű backend nem csupán technikai extrát jelent: élőbbé, interaktívabbá teszi az alkalmazásokat. A felhasználók gyorsabban reagálhatnak, a rendszer dinamikusabb lesz. Ezért a WebSocket + STOMP kombináció olyan projektekben is megjelenik, mint:
- tőzsdei élő adatok
- sporteredmények
- ügyfélszolgálati chatek
- logisztikai dashboardok
A Spring Boot egyik ereje pont abban rejlik, hogy nemcsak REST API-ra, hanem valós idejű rendszerekre is kiválóan alkalmas.
Összegzés
A WebSocket és STOMP támogatás a Spring Boot-ban erős eszközt ad a kezünkbe, ha real-time funkciókat szeretnénk megvalósítani. A kezdeti belépési küszöb ugyan magasabb lehet, mint egy egyszerű REST API esetén, de az előnyök – gyorsaság, kétirányúság, esemény-alapúság – sokszorosan megtérülnek.
Akár egy chat alkalmazás, akár egy valós idejű monitoring rendszer, akár egy értesítési platform alapja lehet ez a technológia. A Spring pedig – szokásához híven – segít, hogy mindezt átlátható, konfigurálható módon vezethessük be a saját alkalmazásainkba.
Ha szeretnél ilyen funkciókat megvalósítani a saját projektjeidben, a Java Spring Boot alapú backend fejlesztés kurzus során lépésről lépésre végigvezetünk a teljes folyamaton – példakóddal, gyakorlati projektekkel, szakértői mentorálással. WebSocketekről pedig Középhaladó Java Spring Boot fejlesztés képzésünkön fogsz hallani. Ha pedig más kapcsolódó képzés érdekel, nézd meg további Java kurzusainkat!