Sobes.tech
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.

  1. 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();
    
  2. 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.
  3. 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);
    };
    
  4. 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.