Sobes.tech
Junior

Kirjeldage mõnda viisi, kuidas server ja klient saavad omavahel suhelda.

sobes.tech AI

Vastus AI-lt

On olemas mõned peamised viisid kliendi (brauseri) ja serveri vaheliseks suhtluseks.

  1. HTTP/HTTPS (Polling/Short Polling):

    • Klient saadab serverile päringu ja ootab vastust.
    • Server töötleb päringu ja saadab vastuse.
    • Short Polling puhul saadab klient perioodiliselt päringuid serverile, et kontrollida uuendusi.
    • Lihtne rakendada, kuid ebaefektiivne sagedaste uuenduste puhul, kuna iga päringuga kaasnevad kulud.
    // Näide lihtsast Short Pollingust
    function checkUpdates() {
      fetch('/api/updates')
        .then(response => response.json())
        .then(data => {
          // Töötle saadud andmeid
        })
        .finally(() => {
          setTimeout(checkUpdates, 5000); // Korda 5 sekundi pärast
        });
    }
    
    checkUpdates();
    
  2. Long Polling:

    • Klient saadab päringu serverile, mis hoiab seda avatud kuni uute andmete ilmumiseni või ajapiirangu täitumiseni.
    • Kui andmed on saadaval, saadab server kohe vastuse, mille järel klient saadab uue päringu.
    • Efektiivsem kui Short Polling, kuid endiselt on viivitus andmete saamise ja järgmise päringu saatmise vahel.
  3. WebSockets:

    • Loob püsiva kahepoolse ühenduse kliendi ja serveri vahel.
    • Pärast ühenduse loomist saavad mõlemad pooled saata ja vastu võtta andmeid igal ajal ilma täiendavate HTTP-päringuteta.
    • Ideaalne reaalajas rakendustele (vestlused, online-mängud, teavitused).
    const socket = new WebSocket('ws://localhost:8080');
    
    socket.onopen = function(event) {
      console.log('Ühendus loodud');
      socket.send('Tere, server!');
    };
    
    socket.onmessage = function(event) {
      console.log('Saaud sõnum serverilt:', event.data);
    };
    
    socket.onclose = function(event) {
      if (event.wasClean) {
        console.log(`Ühendus suletud puhtalt, kood=${event.code}, põhjus=${event.reason}`);
      } else {
        console.error('Ühendus katkestati');
      }
    };
    
    socket.onerror = function(error) {
      console.error('WebSocket viga:', error);
    };
    
  4. Server-Sent Events (SSE):

    • Annab serveril võimaluse saata andmeid kliendile ühesuunalise HTTP-ühenduse kaudu.
    • Klient tellib sündmuste voo serverilt.
    • Sobib olukordadesse, kus server saadab uuendusi kliendile, kuid klient ei saada andmeid serverile vastusena (näiteks uudiste voog, ülesande edenemise kuvamine).
    const eventSource = new EventSource('/api/stream');
    
    eventSource.onmessage = function(event) {
      console.log('Saadud sündmus serverilt:', event.data);
    };
    
    eventSource.onerror = function(error) {
      console.error('SSE viga:', error);
      eventSource.close(); // Sulge ühendus vea korral
    };
    

Iga meetodil on oma eelised ja puudused ning valik sõltub konkreetse rakenduse nõuetest uuenduste sageduse, andmemahtude ja kahepoolse suhtluse vajaduse osas.