CodeGym /Cours /Frontend SELF FR /Introduction à WebSocket

Introduction à WebSocket

Frontend SELF FR
Niveau 46 , Leçon 1
Disponible

6.1 Concepts de base de WebSocket

WebSocket — c'est un protocole de communication qui offre un canal de communication duplex complet via une seule connexion TCP. Il permet d'effectuer un transfert de données bidirectionnel entre le client et le serveur, ce qui le rend idéal pour les applications nécessitant un échange de données en temps réel permanent, telles que les chats, les jeux en ligne et les systèmes de notification.

Avantages de WebSocket

  1. Communication bidirectionnelle : WebSocket assure un transfert de données bidirectionnel, permettant au serveur et au client d'envoyer des messages à tout moment.
  2. Moins de latence : par rapport aux requêtes HTTP traditionnelles, WebSocket réduit la latence grâce à une connexion continue.
  3. Moins de charge sur le serveur : WebSocket réduit le nombre de requêtes HTTP, diminuant ainsi la charge sur le serveur.

Composants principaux de WebSocket

  1. Serveur WebSocket : la partie serveur qui accepte et gère les connexions WebSocket.
  2. Client WebSocket : la partie cliente qui établit la connexion au serveur WebSocket et échange des données.

6.2 Travailler avec WebSocket en JavaScript

Travailler avec WebSocket en JavaScript se fait via l'objet WebSocket, qui fournit des méthodes pour établir la connexion, envoyer et recevoir des messages, ainsi que pour gérer les événements.

Création d'une connexion WebSocket :

JavaScript
    
      const socket = new WebSocket('ws://server.example.com/chat');
    
  

Événements WebSocket :

  1. open: déclenché lorsque la connexion est établie.
  2. message: déclenché lorsqu'un message est reçu du serveur.
  3. error: déclenché en cas d'erreur.
  4. close: déclenché lors de la fermeture de la connexion.

Exemple d'utilisation de WebSocket :

JavaScript
    
      const socket = new WebSocket('ws://server.example.com/chat');

      socket.addEventListener('open', (event) => {
        console.log('Connected to the WebSocket server');
        socket.send('Hello Server!');
      });

      socket.addEventListener('message', (event) => {
        console.log('Message from server:', event.data);
      });

      socket.addEventListener('error', (event) => {
        console.error('WebSocket error:', event);
      });

      socket.addEventListener('close', (event) => {
        console.log('Disconnected from WebSocket server');
      });
    
  

6.3 Exemple de serveur WebSocket avec Node.js

Pour créer un serveur WebSocket, on peut utiliser la bibliothèque ws dans Node.js.

Installation de la bibliothèque :

Terminal
    
      npm install ws
    
  

Exemple de serveur WebSocket :

JavaScript
    
      const WebSocket = require('ws');
      const wss = new WebSocket.Server({ port: 8080 });

      wss.on('connection', (ws) => {
        console.log('New client connected');

        ws.on('message', (message) => {
          console.log('Received:', message);
          ws.send(`Server says: ${message}`);
        });

        ws.on('close', () => {
          console.log('Client disconnected');
        });
      });

      console.log('WebSocket server is running on ws://localhost:8080');
    
  

6.4 Événements et méthodes WebSocket clés

Événements côté client :

  • onopen: déclenché lorsque la connexion WebSocket est établie
  • onmessage: déclenché lorsqu'un message est reçu du serveur
  • onclose: déclenché lorsque la connexion WebSocket est fermée
  • onerror: déclenché en cas d'erreur WebSocket

Méthodes côté client

  • send(data): envoie des données au serveur
  • close(code, reason): ferme la connexion WebSocket avec le code et la raison spécifiés

Événements côté serveur

  • connection: déclenché lorsque le client se connecte au serveur
  • message: déclenché lorsque le serveur reçoit un message du client
  • close: déclenché lorsque la connexion WebSocket est fermée
  • error: déclenché en cas d'erreur WebSocket

Méthodes côté serveur

  • send(data): envoie des données au client
  • close(code, reason): ferme la connexion WebSocket avec le code et la raison spécifiés

6.5 Exemples d'utilisation de WebSocket

Exemple : Chat en temps réel

Côté client :

HTML
    
      <!DOCTYPE html>
      <html>
        <head>
          <title>WebSocket Chat</title>
        </head>
        <body>
          <input type="text" id="message" placeholder="Enter your message" />
          <button onclick="sendMessage()">Send</button>
          <div id="chat"></div>

          <script>
            const socket = new WebSocket('ws://localhost:8080');
            const chat = document.getElementById('chat');

            socket.onopen = function() {
              console.log('WebSocket is open now.');
            };

            socket.onmessage = function(event) {
              const message = document.createElement('p');
              message.textContent = event.data;
              chat.appendChild(message);
            };

            socket.onclose = function() {
              console.log('WebSocket is closed now.');
            };

            socket.onerror = function(event) {
              console.error('WebSocket error observed:', event);
            };

            function sendMessage() {
              const messageInput = document.getElementById('message');
              const message = messageInput.value;
              socket.send(message);
              messageInput.value = '';
            }
          </script>
        </body>
      </html>
    
  

Côté serveur :

JavaScript
    
      const WebSocket = require('ws');

      const server = new WebSocket.Server({ port: 8080 });

      server.on('connection', (ws) => {
        console.log('New client connected!');

        ws.on('message', (message) => {
          console.log('Received:', message);
          // Broadcast du message à tous les clients connectés
          server.clients.forEach(client => {
            if (client.readyState === WebSocket.OPEN) {
              client.send(message);
            }
          });
        });

        ws.on('close', () => {
          console.log('Client disconnected');
        });

        ws.on('error', (error) => {
          console.error('WebSocket error:', error);
        });
      });

      console.log('WebSocket server is running on ws://localhost:8080');
    
  
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION