Sobes.tech
Junior

Descrieți câteva modalități de comunicare între server și client.

sobes.tech AI

Răspuns de la AI

Există mai multe metode principale de comunicare între client (browser) și server.

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

    • Clientul trimite o solicitare către server și așteaptă un răspuns.
    • Serverul procesează solicitarea și trimite răspunsul.
    • În cazul Short Polling, clientul trimite periodic solicitări către server pentru a verifica dacă există actualizări.
    • Este simplu de implementat, dar ineficient pentru actualizări frecvente din cauza costurilor fiecărei solicitări.
    // Exemplu de Short Polling simplu
    function checkUpdates() {
      fetch('/api/updates')
        .then(response => response.json())
        .then(data => {
          // Procesarea datelor primite
        })
        .finally(() => {
          setTimeout(checkUpdates, 5000); // Repetă la fiecare 5 secunde
        });
    }
    
    checkUpdates();
    
  2. Long Polling:

    • Clientul trimite o solicitare către server, care menține conexiunea deschisă până când apar date noi sau expiră timeout-ul.
    • Când apar date, serverul trimite răspunsul imediat, apoi clientul trimite o nouă solicitare.
    • Este mai eficient decât Short Polling, dar există întârziere între primirea datelor și trimiterea următoarei solicitări.
  3. WebSockets:

    • Creează o conexiune bidirecțională persistentă între client și server.
    • După stabilirea conexiunii, ambele părți pot trimite și primi date în orice moment fără solicitări HTTP suplimentare.
    • Sunt ideale pentru aplicații în timp real (chat-uri, jocuri online, notificări).
    const socket = new WebSocket('ws://localhost:8080');
    
    socket.onopen = function(event) {
      console.log('Conexiune stabilită');
      socket.send('Salut server!');
    };
    
    socket.onmessage = function(event) {
      console.log('Mesaj primit de la server:', event.data);
    };
    
    socket.onclose = function(event) {
      if (event.wasClean) {
        console.log(`Conexiune închisă curat, cod=${event.code}, motiv=${event.reason}`);
      } else {
        console.error('Conexiune întreruptă');
      }
    };
    
    socket.onerror = function(error) {
      console.error('Eroare WebSocket:', error);
    };
    
  4. Server-Sent Events (SSE):

    • Permite serverului să trimită date către client într-o singură direcție printr-o conexiune HTTP.
    • Clientul se abonează la un flux de evenimente de la server.
    • Sunt potrivite pentru cazurile în care serverul trimite actualizări către client, dar clientul nu trimite date înapoi (de exemplu, flux de știri, progresul unei sarcini).
    const eventSource = new EventSource('/api/stream');
    
    eventSource.onmessage = function(event) {
      console.log('Eveniment primit de la server:', event.data);
    };
    
    eventSource.onerror = function(error) {
      console.error('Eroare SSE:', error);
      eventSource.close(); // Închide conexiunea în caz de eroare
    };
    

Fiecare metodă are avantajele și dezavantajele sale, iar alegerea depinde de cerințele specifice ale aplicației în ceea ce privește frecvența actualizărilor, volumul de date și necesitatea comunicării bidirecționale.