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

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