Junior
Co jsou webové sokety?
sobes.tech AI
Odpověď od AI
Websockets (Websockets) jsou protokol pro obousměrnou komunikaci přes jedno TCP spojení, který umožňuje výměnu dat v reálném čase mezi prohlížečem a serverem.
Klíčové rozdíly oproti tradičním HTTP požadavkům:
- Obousměrná komunikace: Server může posílat data klientovi bez předchozího požadavku od klienta.
- Jedno spojení: Naváže se jedno dlouhodobé spojení, čímž se odstraňují náklady na navázání nového spojení pro každý výměnu dat (jako u HTTP).
- Snížení latence: Méně času se tráví na navázání spojení, výměnu hlaviček a zpracování krátkých požadavků/odpovědí.
Princip fungování:
- Handshake: Prohlížeč odešle speciální HTTP požadavek na server (s hlavičkami
Upgrade: websocketaConnection: Upgrade). - Navázání spojení: Pokud server podporuje websockety, odpoví s kódem
101 Switching Protocols, po čemž spojení přejde na websocket protokol. - Přenos dat: Po navázání spojení mohou obě strany volně vyměňovat zprávy kdykoliv.
Příklady použití:
- Online hry
- Chaty a messengery
- Reálné aktualizace dat (kurzy, zprávy)
- Kolaborativní nástroje
Výhody:
- Nízká latence
- Efektivní využití zdrojů (méně overheadu)
- Obousměrná komunikace v reálném čase
Nevýhody:
- Vyžaduje podporu jak na straně klienta (prohlížeč), tak na straně serveru.
- Složitější implementace ve srovnání s jednoduchými HTTP požadavky.
Příklad klientského kódu v JavaScriptu:
// vytvoření websocket
const socket = new WebSocket('wss://example.com/websocket');
// handler pro otevření spojení
socket.onopen = function(event) {
console.log('Spojení navázáno');
socket.send('Ahoj, server!'); // odeslání zprávy serveru
};
// handler pro příjem zpráv
socket.onmessage = function(event) {
console.log('Zpráva od serveru: ' + event.data);
};
// handler pro uzavření spojení
socket.onclose = function(event) {
if (event.wasClean) {
console.log(`Spojení ukončeno čistě, kód=${event.code} důvod=${event.reason}`);
} else {
console.log('Spojení přerušeno'); // například kvůli chybě sítě
}
};
// handler pro chyby
socket.onerror = function(error) {
console.error(`Chyba websocketu: ${error}`);
};
// uzavření spojení (pokud je potřeba)
// socket.close();