Sobes.tech
Junior

Décrivez quelques méthodes de communication entre le serveur et le client.

sobes.tech IA

Réponse de l'IA

Il existe plusieurs méthodes principales de communication entre le client (navigateur) et le serveur.

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

    • Le client envoie une requête au serveur et attend une réponse.
    • Le serveur traite la requête et envoie la réponse.
    • En Short Polling, le client envoie périodiquement des requêtes pour vérifier les mises à jour.
    • C'est simple à mettre en œuvre, mais inefficace pour des mises à jour fréquentes en raison des coûts de chaque requête.
    // Exemple de Short Polling simple
    function checkUpdates() {
      fetch('/api/updates')
        .then(response => response.json())
        .then(data => {
          // Traitement des données reçues
        })
        .finally(() => {
          setTimeout(checkUpdates, 5000); // Répéter toutes les 5 secondes
        });
    }
    
    checkUpdates();
    
  2. Long Polling:

    • Le client envoie une requête au serveur, qui maintient la connexion ouverte jusqu'à ce qu'il y ait de nouvelles données ou que le délai d'expiration soit atteint.
    • Lorsqu'il y a des données, le serveur envoie la réponse immédiatement, puis le client envoie une nouvelle requête.
    • Plus efficace que le Short Polling, mais il y a encore un délai entre la réception des données et l'envoi de la prochaine requête.
  3. WebSockets:

    • Créent une connexion bidirectionnelle persistante entre le client et le serveur.
    • Après l'établissement de la connexion, les deux parties peuvent envoyer et recevoir des données à tout moment sans requêtes HTTP supplémentaires.
    • Idéal pour les applications en temps réel (chats, jeux en ligne, notifications).
    const socket = new WebSocket('ws://localhost:8080');
    
    socket.onopen = function(event) {
      console.log('Connexion établie');
      socket.send('Bonjour serveur!');
    };
    
    socket.onmessage = function(event) {
      console.log('Message reçu du serveur:', event.data);
    };
    
    socket.onclose = function(event) {
      if (event.wasClean) {
        console.log(`Connexion fermée proprement, code=${event.code}, raison=${event.reason}`);
      } else {
        console.error('Connexion interrompue');
      }
    };
    
    socket.onerror = function(error) {
      console.error('Erreur WebSocket:', error);
    };
    
  4. Server-Sent Events (SSE):

    • Permettent au serveur d'envoyer des données au client dans une seule direction via une connexion HTTP.
    • Le client s'abonne à un flux d'événements du serveur.
    • Convient pour les cas où le serveur envoie des mises à jour au client, mais le client n'envoie pas de données en retour (par exemple, flux d'actualités, progression des tâches).
    const eventSource = new EventSource('/api/stream');
    
    eventSource.onmessage = function(event) {
      console.log('Événement reçu du serveur:', event.data);
    };
    
    eventSource.onerror = function(error) {
      console.error('Erreur SSE:', error);
      eventSource.close(); // Fermer la connexion en cas d'erreur
    };
    

Chaque méthode a ses avantages et ses inconvénients, et le choix dépend des exigences spécifiques de l'application en termes de fréquence de mise à jour, volume de données et nécessité de communication bidirectionnelle.