Blog

WebSocket és STOMP Spring Boot alatt – valós idejű alkalmazások egyszerűen

Spring Boot Középhaladó

WebSocket és STOMP Spring Boot alatt – valós idejű alkalmazások egyszerűen

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!

Hírlevél feliratkozás

Az adataim megadásával elfogadom a Cubix Institute of Technology adatkezelési tájékoztatóját.
Oszd meg, ha tetszett:
Facebook
Twitter
LinkedIn
Email

Saját blogposztot szeretnél megosztani?

A jelentkezéshez töltsd ki az űrlapot

Vendégcikk beküldése

Add meg elérhetőségeidet, valamint csatold be az általad megosztani kívánt tartalmat.

Az adataim megadásával elfogadom a Cubix Institute of Technology adatkezelési tájékoztatóját.

Beiratkozás most!

Vezetéknév *
Email *
Keresztnév *
Telefonszám *
Válassz kezdés időpontot
Fizetési mód *
Számlázási név
Irányítószám
Cím (utca házszám)
Ország
Város
Cégnév
Adószám

* Az adataim megadásával elfogadom a Cubix Institute of Technology adatkezelési tájékoztatóját.

Are you interested, but have a few questions?​

Fill out this form and we will get back to you and answer all your questions.

Please select form to show
By providing your data, you accept the Cubix Institute of Technology Privacy Policy.

Szeretnék értesülni a következő elérhető tanfolyam időpontjáról.​

Az adataim megadásával elfogadom a Cubix Institute of Technology adatkezelési tájékoztatóját.

Érdekel, de van néhány kérdésem.

Add meg elérhetőségedet és hamarosan jelentkezünk további információkkal a képzéssel kapcsolatosan.

Az adataim megadásával elfogadom a Cubix Institute of Technology adatkezelési tájékoztatóját.

Are you interested, but have a few questions?​

Fill out this form and we will get back to you and answer all your questions.

Please select form to show
By providing your data, you accept the Cubix Institute of Technology Privacy Policy.

Enroll Now!

Fill out this form and we will get back to you and answer all your questions.

First Name *
Email *
Last Name *
Phone number *
Choose starting date
Payment Method *
Billing Name
ZIP
Address
Country
City
Company
TAX Number

* By providing your data, you accept the Cubix Institute of Technology Privacy Policy.