Sobes.tech
Junior

Mi az a WebSocket?

sobes.tech MI

Válasz az MI-től

A Websockets (Websockets) egy kétirányú kommunikációs protokoll egyetlen TCP-kapcsolaton keresztül, amely lehetővé teszi az adatok valós idejű cseréjét a böngésző és a szerver között.

Fő különbségek a hagyományos HTTP-kérésekkel szemben:

  • Kétirányú kommunikáció: A szerver adatokat küldhet a kliensnek anélkül, hogy előzetes kérés lenne.
  • Egy kapcsolat: Egy hosszú életű kapcsolat jön létre, kiküszöbölve az új kapcsolat létrehozásának költségét minden adatcsere esetén (mint az HTTP-nél).
  • Késleltetés csökkentése: Kevesebb időt fordítanak a kapcsolat létrehozására, a fejléccserére és a rövid kérések/válaszok feldolgozására.

Működési elv:

  1. Handshake: A böngésző egy speciális HTTP-kérést küld a szervernek (Upgrade: websocket és Connection: Upgrade fejléckkel).
  2. Kapcsolat létesítése: Ha a szerver támogatja a websocketeket, akkor a 101 Switching Protocols kóddal válaszol, majd a kapcsolat átáll a websocket protokollra.
  3. Adatátvitel: A kapcsolat létrejötte után mindkét fél szabadon cserélhet üzeneteket bármikor.

Használati példák:

  • Online játékok
  • Csevegő- és üzenetküldő alkalmazások
  • Valós idejű adatfrissítések (árfolyamok, hírek)
  • Együttműködési eszközök

Előnyök:

  • Alacsony késleltetés
  • Hatékony erőforrás-használat (kevesebb overhead)
  • Kétirányú kommunikáció valós időben

Hátrányok:

  • Szükség van támogatásra mind az ügyfél (böngésző), mind a szerver oldalán.
  • Bonyolultabb megvalósítás, mint az egyszerű HTTP-kérések.

JavaScript klienskód példája:

// WebSocket létrehozása
const socket = new WebSocket('wss://example.com/websocket');

// kapcsolat nyitásának kezelése
socket.onopen = function(event) {
  console.log('Kapcsolat létrejött');
  socket.send('Szia, szerver!'); // üzenet küldése a szervernek
};

// üzenet fogadásának kezelése
socket.onmessage = function(event) {
  console.log('Üzenet a szervertől: ' + event.data);
};

// kapcsolat lezárásának kezelése
socket.onclose = function(event) {
  if (event.wasClean) {
    console.log(`Tiszta lezárás, kód=${event.code} ok=${event.reason}`);
  } else {
    console.log('Kapcsolat megszakadt'); // például hálózati hiba miatt
  }
};

// hiba kezelése
socket.onerror = function(error) {
  console.error(`WebSocket hiba: ${error}`);
};

// kapcsolat lezárása (ha szükséges)
// socket.close();