Junior
Popíšte niekoľko spôsobov komunikácie medzi serverom a klientom.
sobes.tech AI
Odpoveď od AI
Existuje niekoľko základných spôsobov komunikácie medzi klientom (prehliadačom) a serverom.
-
HTTP/HTTPS (Polling/Short Polling):
- Klient odosiela požiadavku na server a čaká na odpoveď.
- Server spracuje požiadavku a odošle odpoveď.
- Pri Short Polling klient periodicky odosiela požiadavky na server, aby skontroloval, či sú k dispozícii aktualizácie.
- Jednoduché na implementáciu, ale neefektívne pre časté aktualizácie kvôli režii spojené s každou požiadavkou.
// Príklad jednoduchého Short Polling function checkUpdates() { fetch('/api/updates') .then(response => response.json()) .then(data => { // Spracovanie získaných dát }) .finally(() => { setTimeout(checkUpdates, 5000); // Opakovanie po 5 sekundách }); } checkUpdates(); -
Long Polling:
- Klient odosiela požiadavku na server, ktorý ju udrží otvorenú, kým sa neobjavia nové dáta alebo nevyprší timeout.
- Keď sa objavia dáta, server ihneď odošle odpoveď, a klient odošle novú požiadavku.
- Efektívnejšie ako Short Polling, ale stále existuje oneskorenie medzi prijatím dát a odoslaním ďalšej požiadavky.
-
WebSockets:
- Vytvárajú trvalé obojsmerné spojenie medzi klientom a serverom.
- Po nadviazaní spojenia môžu obe strany posielať a prijímať dáta kedykoľvek bez ďalších HTTP požiadaviek.
- Ideálne pre aplikácie v reálnom čase (chaty, online hry, oznámenia).
const socket = new WebSocket('ws://localhost:8080'); socket.onopen = function(event) { console.log('Spojenie nadviazané'); socket.send('Ahoj server!'); }; socket.onmessage = function(event) { console.log('Prijatá správa od servera:', event.data); }; socket.onclose = function(event) { if (event.wasClean) { console.log(`Spojenie bolo čisté, kód=${event.code}, dôvod=${event.reason}`); } else { console.error('Spojenie bolo prerušené'); } }; socket.onerror = function(error) { console.error('Chyba WebSocket:', error); }; -
Server-Sent Events (SSE):
- Umožňujú serveru posielať dáta klientovi jednostranne cez HTTP spojenie.
- Klient sa prihlási na tok udalostí od servera.
- Vhodné pre prípady, keď server posiela aktualizácie klientovi, ale klient neodosiela dáta späť na server (napr. tok správ, zobrazenie pokroku úlohy).
const eventSource = new EventSource('/api/stream'); eventSource.onmessage = function(event) { console.log('Dostalo sa udalosti od servera:', event.data); }; eventSource.onerror = function(error) { console.error('Chyba SSE:', error); eventSource.close(); // Zatvorenie spojenia pri chybe };
Každá metóda má svoje výhody a nevýhody, a výber závisí od konkrétnych požiadaviek aplikácie na frekvenciu aktualizácií, objem dát a potrebu obojsmernej komunikácie.