WebSocket — egy teljes duplex kommunikációs protokoll, amely állandó kapcsolatot biztosít a kliens és a szerver között valós idejű adatcseréhez. A hagyományos HTTP-kérésekkel ellentétben ez a protokoll egyetlen kapcsolatot hoz létre és használ azt kétirányú átvitelre ismételt kézfogások nélkül. A Mozilla Developer Network (2025) adatai szerint a WebSocket akár 50%-kal csökkenti a késleltetést a HTTP pollinghoz képest valós idejű alkalmazásokban.
Főbb pontok
WebSocket — egy kommunikációs protokoll, amely TCP felett működik és teljes duplex csatornát biztosít a kliens és a szerver között. Az IETF szabványosította RFC 6455-ként 2011-ben, és támogatja az összes modern böngésző, mobil platform és szerver keretrendszer.
A HTTP-től eltérően, ahol a kliens kezdeményezi a kérést és választ kap, a WebSocket lehetővé teszi mindkét fél számára, hogy a kapcsolat létrejötte után bármikor üzeneteket küldjön. Ez ideálissá teszi olyan forgatókönyvekhez, amelyek azonnali adatszállítást igényelnek: chat-ek, értesítések, közös dokumentumszerkesztés.
A WebSocket protokoll a HTTP 80-as vagy HTTPS 443-as portot használja a kezdeti kézfogáshoz, majd saját protokolljára vált minimális fejléccel — mindössze 2 bájt, szemben a HTTP 800+ bájtjával. Ez a tulajdonság jelentős teljesítményelőnyt biztosít nagyszámú üzenet esetén.
A WebSocket kapcsolat egy HTTP Upgrade kéréssel kezdődik, majd a protokoll bináris keretformátumra vált. A keret mérete 2 bájttól 2^63 bájtig terjed, lehetővé téve mind rövid szöveges üzenetek, mind nagy bináris adatok küldését. Támogatott az üzenetek fragmentálása, az adatok maszkolása a klienstől a szerver felé, valamint a ping/pong a kapcsolat fenntartásához.
A WebSocket kapcsolat létrehozásának folyamata két szakaszból áll: kézfogás és adatátvitel. A kézfogás szakaszában a kliens HTTP-kérést küld a Upgrade: websocket fejléccel, a szerver pedig megerősíti a protokollváltást a 101 Switching Protocols státusszal. Ezt követően a kapcsolat teljes duplex átviteli módba lép.
A WebSocketben minden üzenet keretekre van osztva. A keret opcode-ot (szöveg, bináris adat, lezárás, ping/pong), hasznos adat hosszúságot és maszkolókulcsot tartalmaz a klienstől érkező adatokhoz. A keret fragmentálható — a vezérlő keretek (ping/pong) az üzenetfragmentumok között küldhetők, megakadályozva a kapcsolat megszakadását hosszú átvitel során.
const ws = new WebSocket('wss://example.com/chat')
ws.addEventListener('open', () => {
console.log('Kapcsolat létrejött')
ws.send('Üdv, szerver!')
})
ws.addEventListener('message', (event) => {
console.log('Fogadva:', event.data)
})
ws.addEventListener('close', () => {
console.log('Kapcsolat bezárva')
})
A fenti példában a kliens létrehoz egy WebSocket objektumot, megadva a biztonságos wss:// URL-t. A kapcsolat megnyitása után egy üdvözlő üzenet kerül elküldésre, a message kezelő pedig fogadja a szerver válaszait. Lezáráskor a close kezelő aktiválódik — ez fontos az újracsatlakozáshoz hálózati megszakítás esetén.
A fő különbség a WebSocket és a HTTP között az interakciós modellben rejlik. A HTTP a kérés-válasz séma szerint működik: a kliens kérést kezdeményez, a szerver választ küld, a kapcsolat bezáródik. A WebSocket ezzel szemben állandó csatornát hoz létre, amelyen keresztül mindkét fél bármikor kezdeményezhet átvitelt.
Az alacsony késleltetést és állandó adatfolyamot igénylő alkalmazásokhoz a WebSocket jelentősen hatékonyabb. A HTTP Long Polling — alternatíva, ahol a szerver nyitva tartja a kérést az adatok megjelenéséig — többletterhelést okoz a szerveren és növeli a memóriafogyasztást a sok egyidejű kapcsolat miatt.
| Paraméter | WebSocket | HTTP |
|---|---|---|
| Modell | Teljes duplex | Kérés-válasz |
| Fejléc | 2–14 bájt | 400–800 bájt |
| Állandó kapcsolat | Igen, egy | Nem, új kérésenként |
| Késleltetés | Alacsony (1–5 ms) | Magas (50–200 ms) |
| Protokoll | ws:// vagy wss:// | http:// vagy https:// |
A High Performance Browser Networking (Grigorik, O’Reilly) szerint a WebSocket 40–60%-kal csökkenti a hálózati késleltetést valós idejű forgatókönyvekben a HTTP Long Pollinghoz képest, a szerverterhelés pedig 3–5-szörösére csökken az ismételt kézfogások megszüntetése miatt.
Az alacsony késleltetésnek és a kétirányú kommunikációnak köszönhetően a WebSocketet széles körben használják. A fő forgatókönyvek magukban foglalják az azonnali üzenetküldést, az állapotszinkronizálást játékokban és a piaci adatok továbbítását pénzügyi rendszerekben.
A WebSocket de facto szabvánnyá vált a chat alkalmazások számára. Az olyan platformok, mint a Slack, a Telegram Web és a WhatsApp Web, a WebSocketet használják az azonnali üzenetkézbesítéshez. A protokoll lehetővé teszi szöveges üzenetek és fájlok küldését egyetlen csatornán keresztül, a ping/pong mechanizmus pedig aktívan tartja a kapcsolatot még inaktivitás esetén is.
A többjátékos böngésző- és mobiljátékok minimális késleltetést igényelnek a játékosok állapotának szinkronizálásához. A WebSocket koordinátákat, akciókat és eseményeket közvetít valós időben a HTTP-kérések késleltetése nélkül. Az olyan keretrendszerek, mint a Socket.IO és a Colyseus, elvonatkoztatják az alacsony szintű munkát a protokollal, automatikus újracsatlakozást és szobákat adva hozzá.
A tőzsdei terminálok és kereskedési platformok a WebSocketet használják valós idejű árfolyamok fogadására. Néhány ezredmásodperces késleltetés milliókba kerülhet, ezért a pénzügyi API-k — például a Binance WebSocket Streams, a Coinbase Pro — pont WebSocket interfészeket nyújtanak a piaci adatokhoz.
A mobilfejlesztésben a WebSocket natív API-kon keresztül használatos: URLSessionWebSocketTask iOS-en és OkHttp WebSocket Androidon. A Flutterhez a web_socket_channel könyvtár, a React Native-hez pedig a react-native-websocket létezik. Az IoT-eszközök a WebSocketet használják telemetria küldésére és vezérlőparancsok fogadására, mivel a protokoll kevesebb energiát fogyaszt, mint az állandó HTTP-polling.
Vizsgáljuk meg a szerveroldali részt Node.js-ben a ws könyvtárral — a WebSocket legnépszerűbb JavaScript implementációjával. A szerver fogadja a kapcsolatokat, feldolgozza az üzeneteket és továbbítja azokat az összes csatlakozott klienshez.
const WebSocket = require('ws')
const wss = new WebSocket.Server({ port: 8080 })
wss.on('connection', (ws) => {
console.log('Új kliens csatlakozott')
ws.on('message', (data) => {
console.log('Fogadva:', data.toString())
ws.send('A szerver megkapta az üzenetét')
})
ws.on('close', () => {
console.log('Kliens lecsatlakozott')
})
})
console.log('WebSocket szerver elindítva a 8080-as porton')
A szerver létrehoz egy WebSocket.Server példányt a 8080-as porton, és várja a kapcsolatokat. Minden új klienshez külön ws objektum tartozik, amelyen keresztül a szerver egyedi üzeneteket küldhet. Az üzenetek továbbítása az összes klienshez a kapcsolatok tömbjének tömeges bejárásával történik. Nagyszámú kliens esetén (több mint 1000) javasolt a klaszterezést támogató könyvtárak, mint a Socket.IO használata, amelyek Redis-en keresztüli skálázást és automatikus újracsatlakozást adnak hozzá.
wss.clients.forEach((client) => {
if (client.readyState === WebSocket.OPEN) {
client.send('Üzenet az összes résztvevőnek')
}
})
A readyState ellenőrzése küldés előtt kötelező: ha a kliens már lecsatlakozott, a send hívás hibát dob. A WebSocket.OPEN zászló garantálja, hogy a kapcsolat aktív és az üzenet kézbesítve lesz.
Mobil iOS alkalmazásokhoz a WebSocket az URLSessionWebSocketTask-on keresztül implementálható, amely iOS 13-tól érhető el. A munkamenet létrehoz egy feladatot a wss:// protokoll URL-jével, majd a send és receive metódusok hívódnak meg. Az üzenetek fogadása folyamatos receive rekurzióval szervezhető, amely az előző üzenet feldolgozása után várja a következőt, biztosítva a folyamatos adatfogadást újracsatlakozás nélkül. Androidhoz az OkHttp WebSocket használatos, amely hasonló interfészt biztosít onOpen, onMessage, onClosing és onClosed callback-ekkel, valamint automatikus újracsatlakozást kapcsolat megszakadása esetén.
A WebSocket mobilalkalmazásokban történő használatakor fontos figyelembe venni az életciklus-kezelést: amikor az alkalmazás háttérbe kerül, a kapcsolatot a rendszer megszakíthatja. iOS-en a kapcsolatot az előtérbe való visszatéréskor a sceneDidBecomeActive delegált segítségével kell helyreállítani. Androidon Lifecycle-aware komponenseket vagy Service-t kell használni a kapcsolat fenntartásához. Ezenkívül javasolt az exponenciális visszahúzódás (exponential backoff) implementálása újracsatlakozáskor — a próbálkozások közötti intervallum növelése 1-ről 30 másodpercre, hogy ne terhelje túl a szervert átmeneti hálózati problémák esetén.
Gyakran ismételt kérdések
A WebSocket állandó teljes duplex kapcsolatot hoz létre, amelyen keresztül mindkét fél bármikor küldhet adatokat. A HTTP a kérés-válasz séma szerint működik, ahol minden egyes csere új kapcsolatot és teljes fejléceket igényel. A WebSocket egyetlen TCP-csatornát és mindössze 2–14 bájtos fejléceket használ, ami drámaian csökkenti a késleltetést.
A WebSocket a 80-as portot használja nem biztonságos (ws://) és a 443-as portot biztonságos (wss://) kapcsolatokhoz. Ez lehetővé teszi a legtöbb proxy-szerver és vállalati tűzfal átjárását külön konfiguráció nélkül. A 443-as port ajánlott éles környezetekhez a TLS titkosítás miatt.
Igen, a WebSocket minden mobil platformon támogatott. iOS-ben a natív URLSessionWebSocketTask osztály iOS 13-tól érhető el. Androidban — az OkHttp WebSocket osztály és a szabványos java.net.WebSocket. A React Native-hez a react-native-websocket könyvtár létezik.
A WebSocket Secure — a protokoll biztonságos verziója, amely TLS felett működik. Minden adat titkosítva van, akárcsak a HTTPS-ben. A WSS kötelező éles alkalmazásokhoz, különösen hitelesítési tokenek vagy személyes adatok WebSocketen keresztüli továbbításakor.
A fő alternatívák: HTTP Long Polling (a szerver nyitva tartja a kérést), Server-Sent Events (egyirányú adatfolyam a szervertől) és WebRTC Data Channel (peer-to-peer kommunikáció). A Server-Sent Events egyszerűbben implementálható, de nem támogatja a klienstől a szerver felé történő küldést.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is