Junior
Čo sú webové sokety?
sobes.tech AI
Odpoveď od AI
Websockets (Websockets) sú protokolom obojsmernej komunikácie cez jedno TCP spojenie, ktorý umožňuje výmenu dát medzi prehliadačom a serverom v reálnom čase.
Kľúčové rozdiely oproti tradičným HTTP požiadavkám:
- Obojsmerná komunikácia: Server môže posielať dáta klientovi bez predchádzajúcej požiadavky od klienta.
- Jedno spojenie: Udržiava sa jedno dlhé spojenie, čím sa odstraňujú náklady na vytvorenie nového spojenia pre každú výmenu dát (ako pri HTTP).
- Zníženie oneskorenia: Menej času sa stráca na nadviazanie spojenia, výmenu hlavičiek a spracovanie krátkych požiadaviek/odpovedí.
Princíp práce:
- Handshake: Prehliadač odošle špeciálnu HTTP požiadavku na server (s hlavičkami
Upgrade: websocketaConnection: Upgrade). - Vytvorenie spojenia: Ak server podporuje websockets, odpovie s kódom
101 Switching Protocols, po čom spojenie prejde do websocket protokolu. - Prenos dát: Po nadviazaní spojenia môžu obe strany voľne vymieňať správy kedykoľvek.
Príklady použitia:
- Online hry
- Čaty a messengery
- Reálnečasové aktualizácie dát (kurzy, správy)
- Kolaboratívne nástroje
Výhody:
- Nízke oneskorenie
- Efektívne využívanie zdrojov (menší overhead)
- Obojsmerná komunikácia v reálnom čase
Nevýhody:
- Vyžaduje podporu na strane klienta (prehliadača) aj na strane servera.
- Složitejšia implementácia v porovnaní s jednoduchými HTTP požiadavkami.
Príklad klientskeho kódu v JavaScripte:
// vytvorenie websocket
const socket = new WebSocket('wss://example.com/websocket');
// handler pre otvorenie spojenia
socket.onopen = function(event) {
console.log('Spojenie nadviazané');
socket.send('Ahoj, server!'); // odoslanie správy serveru
};
// handler pre prijatie správy
socket.onmessage = function(event) {
console.log('Prijatá správa od servera: ' + event.data);
};
// handler pre zatvorenie spojenia
socket.onclose = function(event) {
if (event.wasClean) {
console.log(`Spojenie čisto zatvorené, kód=${event.code} dôvod=${event.reason}`);
} else {
console.log('Spojenie prerušení'); // napríklad kvôli výpadku siete
}
};
// handler pre chybu
socket.onerror = function(error) {
console.error(`Chyba websocketu: ${error}`);
};
// zatvorenie spojenia (podľa potreby)
// socket.close();