Sobes.tech
Junior

Aprakstiet dažus veidus, kā serveris un klients var sazināties.

sobes.tech AI

Atbilde no AI

Ir vairākas galvenās saziņas metodes starp klientu (pārlūkprogrammu) un serveri.

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

    • Klients nosūta pieprasījumu serverim un gaida atbildi.
    • Servers apstrādā pieprasījumu un nosūta atbildi.
    • Ar Short Polling klients periodiski sūta pieprasījumus serverim, lai pārbaudītu jaunumus.
    • Vienkārši realizējams, bet neefektīvs biežu atjauninājumu gadījumā dēļ papildu izmaksām katram pieprasījumam.
    // Vienkārša Short Polling piemērs
    function checkUpdates() {
      fetch('/api/updates')
        .then(response => response.json())
        .then(data => {
          // Apstrādā saņemtos datus
        })
        .finally(() => {
          setTimeout(checkUpdates, 5000); // Atkārtojas pēc 5 sekundēm
        });
    }
    
    checkUpdates();
    
  2. Long Polling:

    • Klients nosūta pieprasījumu serverim, kurš tur to atvērtu, kamēr nav jaunu datu vai nav beidzies laika limits.
    • Kad dati ir pieejami, serveris nekavējoties nosūta atbildi, pēc tam klients nosūta jaunu pieprasījumu.
    • Efektīvāks nekā Short Polling, bet joprojām ir aizkaves starp datu saņemšanu un nākamā pieprasījuma nosūtīšanu.
  3. WebSockets:

    • Izveido pastāvīgu divvirzienu savienojumu starp klientu un serveri.
    • Pēc savienojuma izveides abas puses var sūtīt un saņemt datus jebkurā laikā bez papildu HTTP pieprasījumiem.
    • Ideāli piemērots reāllaika lietojumprogrammām (čati, tiešsaistes spēles, paziņojumi).
    const socket = new WebSocket('ws://localhost:8080');
    
    socket.onopen = function(event) {
      console.log('Savienojums izveidots');
      socket.send('Sveiki, server!');
    };
    
    socket.onmessage = function(event) {
      console.log('Saņemta ziņa no servera:', event.data);
    };
    
    socket.onclose = function(event) {
      if (event.wasClean) {
        console.log(`Savienojums slēgts tīri, kods=${event.code}, iemesls=${event.reason}`);
      } else {
        console.error('Savienojums pārtraukts');
      }
    };
    
    socket.onerror = function(error) {
      console.error('WebSocket kļūda:', error);
    };
    
  4. Server-Sent Events (SSE):

    • Ļauj serverim nosūtīt datus klientam vienvirziena režīmā caur HTTP savienojumu.
    • Klients abonē uz notikumu plūsmu no servera.
    • Piemērots gadījumiem, kad serveris sūta atjauninājumus klientam, bet klients neatgriež datus serverim (piemēram, ziņu plūsma, uzdevuma progresu attēlošana).
    const eventSource = new EventSource('/api/stream');
    
    eventSource.onmessage = function(event) {
      console.log('Saņemts notikums no servera:', event.data);
    };
    
    eventSource.onerror = function(error) {
      console.error('SSE kļūda:', error);
      eventSource.close(); // Slēgt savienojumu kļūdas gadījumā
    };
    

Katram metodam ir savas priekšrocības un trūkumi, un izvēle ir atkarīga no konkrētajām lietojumprogrammas prasībām attiecībā uz atjauninājumu biežumu, datu apjomu un divvirzienu saziņas nepieciešamību.