Junior
Popište několik způsobů komunikace mezi serverem a klientem.
sobes.tech AI
Odpověď od AI
Existuje několik základních způsobů komunikace mezi klientem (prohlížečem) a serverem.
-
HTTP/HTTPS (Polling/Short Polling):
- Klient odešle požadavek na server a čeká na odpověď.
- Server požadavek zpracuje a odešle odpověď.
- U Short Polling klient periodicky posílá požadavky na server, aby zkontroloval, zda jsou k dispozici aktualizace.
- Jednoduché na implementaci, ale neefektivní pro časté aktualizace kvůli režii spojené s každým požadavkem.
// Příklad jednoduchého Short Polling function checkUpdates() { fetch('/api/updates') .then(response => response.json()) .then(data => { // Zpracování získaných dat }) .finally(() => { setTimeout(checkUpdates, 5000); // Opakovat za 5 sekund }); } checkUpdates(); -
Long Polling:
- Klient odešle požadavek na server, který požadavek udrží otevřený, dokud se neobjeví nová data nebo nevyprší timeout.
- Po objevení dat server ihned odešle odpověď, poté klient odešle nový požadavek.
- Efektivnější než Short Polling, ale stále existuje zpoždění mezi přijetím dat a odesláním dalšího požadavku.
-
WebSockets:
- Vytvářejí trvalé obousměrné spojení mezi klientem a serverem.
- Po navázání spojení mohou obě strany posílat a přijímat data kdykoliv bez dalších HTTP požadavků.
- Ideální pro aplikace v reálném čase (chaty, online hry, notifikace).
const socket = new WebSocket('ws://localhost:8080'); socket.onopen = function(event) { console.log('Spojení navázáno'); socket.send('Ahoj server!'); }; socket.onmessage = function(event) { console.log('Obdržená zpráva od serveru:', event.data); }; socket.onclose = function(event) { if (event.wasClean) { console.log(`Spojení ukončeno čistě, kód=${event.code}, důvod=${event.reason}`); } else { console.error('Spojení bylo přerušeno'); } }; socket.onerror = function(error) { console.error('Chyba WebSocket:', error); }; -
Server-Sent Events (SSE):
- Umožňují serveru posílat data klientovi jednostranně přes HTTP spojení.
- Klient se přihlásí k proudu událostí od serveru.
- Vhodné pro případy, kdy server posílá aktualizace klientovi, ale klient neodesílá data zpět na server (například zpravodajský kanál, zobrazení průběhu úkolu).
const eventSource = new EventSource('/api/stream'); eventSource.onmessage = function(event) { console.log('Obdrženo událost od serveru:', event.data); }; eventSource.onerror = function(error) { console.error('Chyba SSE:', error); eventSource.close(); // Uzavřít spojení při chybě };
Každá metoda má své výhody a nevýhody, a volba závisí na konkrétních požadavcích aplikace na frekvenci aktualizací, objem dat a potřebu obousměrné komunikace.