WebSocket: mi ez, a teljes duplex kommunikációs protokoll és hogyan működik

Szerző: IT Sectr Megjelenés: 2026-03-06 Olvasási idő: 8 perc

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 — teljes duplex kommunikációs protokoll TCP felett valós idejű adatcseréhez
  • Állandó kapcsolat megszünteti az ismételt HTTP-kézfogás többletköltségeit minden kérésnél
  • Késleltetés 30–50%-kal csökken a HTTP Long Pollinghoz képest a fejlécek hiánya miatt
  • Protokoll támogatott az összes modern böngésző és mobil platform által natív API-n keresztül
  • Alkalmazás magában foglalja a chat-eket, online játékokat, tőzsdei terminálokat és IoT-eszközöket

Mi az a WebSocket?

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 protokoll fő jellemzői

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.

Hogyan működik a WebSocket?

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.

js
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.

WebSocket vs HTTP: összehasonlítás

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éterWebSocketHTTP
ModellTeljes duplexKérés-válasz
Fejléc2–14 bájt400–800 bájt
Állandó kapcsolatIgen, egyNem, új kérésenként
KésleltetésAlacsony (1–5 ms)Magas (50–200 ms)
Protokollws:// 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.

Hol alkalmazzák a WebSocketet

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.

Chat-ek és üzenetküldők

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.

Online játékok

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á.

Pénzügyi alkalmazások

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.

Mobilalkalmazások és IoT

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.

WebSocket kódpéldák

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.

js
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á.

Üzenet küldése az összes kliensnek

js
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

Miben különbözik a WebSocket a HTTP-től?

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.

Melyik portot használja a WebSocket?

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.

Támogatott a WebSocket mobilalkalmazásokban?

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.

Mi az a WebSocket Secure (wss://)?

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.

Milyen alternatívák léteznek a WebSocket helyett?

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

  • WebSocket — teljes duplex valós idejű protokoll TCP felett, RFC 6455 szabványként
  • Állandó kapcsolat megszünteti a HTTP kézfogás többletköltségeit, a késleltetést 1–5 ms-ra csökkentve
  • Keret fejléce mindössze 2–14 bájt, szemben a HTTP 400–800 bájtjával
  • Alkalmazás chat-ekben, online játékokban, tőzsdei terminálokon, IoT-ben és közös szerkesztésben
  • WSS TLS titkosítást biztosít és éles környezetekhez ajánlott
  • Protokoll támogatott minden böngésző, mobil platform és szerveroldali nyelv által
  • Használja a WebSocketet valós idejű funkciókhoz, a HTTP-t pedig szabványos REST-kérésekhez

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.

Projekt megbeszélése

Olvassa el is