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:
- Handshake: A böngésző egy speciális HTTP-kérést küld a szervernek (
Upgrade: websocketésConnection: Upgradefejléckkel). - Kapcsolat létesítése: Ha a szerver támogatja a websocketeket, akkor a
101 Switching Protocolskóddal válaszol, majd a kapcsolat átáll a websocket protokollra. - 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();