recherche
Maisoninterface Webjs tutorielWebSockets, Socket.IO et communication en temps réel avec Node.js

WebSockets, Socket.IO, and Real-Time Communication with Node.js

La communication en temps réel est devenue une fonctionnalité clé des applications modernes, permettant des mises à jour instantanées, un échange de données en direct et des expériences utilisateur réactives. Des technologies comme WebSockets et Socket.IO sont à la pointe des interactions en temps réel. Cet article approfondira les concepts des WebSockets, comment les implémenter dans Node.js et comment Socket.IO simplifie la communication en temps réel.

Qu’est-ce que WebSocket ?

WebSocket est un protocole de communication qui fournit des canaux de communication en duplex intégral sur une seule connexion TCP. Contrairement au protocole HTTP, qui fonctionne selon un modèle requête-réponse, WebSocket permet au serveur et au client de s'envoyer des messages à tout moment, en maintenant une connexion ouverte.

Caractéristiques clés :

  • Connexion persistante : WebSocket maintient la connexion ouverte, réduisant ainsi le besoin de rétablir les connexions.
  • Communication bidirectionnelle : le serveur et le client peuvent envoyer des messages librement.
  • Faible latence : étant donné que WebSocket maintient une connexion ouverte, il élimine la surcharge des requêtes HTTP, réduisant ainsi la latence.

Quand utiliser les WebSockets ?

Les WebSockets sont idéaux pour les applications qui nécessitent un échange de données en temps réel et à faible latence :

  • Applications de chat (par exemple, Slack, WhatsApp Web)
  • Mises à jour sportives en direct
  • Flux boursiers
  • Outils de collaboration en temps réel (par exemple, Google Docs)

Configuration de WebSocket dans Node.js

Node.js prend en charge nativement WebSocket via le package ws, une bibliothèque légère et efficace pour la communication WebSocket.

Étape 1 : Installez le package WebSocket

npm install ws

Étape 2 : Créer un serveur WebSocket

const WebSocket = require('ws');

// Create a WebSocket server that listens on port 8080
const wss = new WebSocket.Server({ port: 8080 });

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

    // When the server receives a message
    ws.on('message', (message) => {
        console.log('Received:', message);
        // Echo the message back to the client
        ws.send(`Server received: ${message}`);
    });

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

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

Explication:

  • Un serveur WebSocket écoute sur le port 8080.
  • L'événement de connexion est déclenché lorsqu'un client se connecte.
  • L'événement de message est déclenché lorsque le serveur reçoit des données du client, qu'il renvoie ensuite.

Étape 3 : Créer un client WebSocket

const ws = new WebSocket('ws://localhost:8080');

ws.on('open', () => {
    console.log('Connected to WebSocket server');
    // Send a message to the server
    ws.send('Hello Server!');
});

ws.on('message', (data) => {
    console.log('Received from server:', data);
});

ws.on('close', () => {
    console.log('Disconnected from server');
});

Sortir:

Server Console:
Client connected
Received: Hello Server!
Client disconnected

Client Console:
Connected to WebSocket server
Received from server: Server received: Hello Server!
Disconnected from server

Qu’est-ce que Socket.IO ?

Socket.IO est une bibliothèque populaire construite sur WebSockets qui simplifie la communication en temps réel. Il fournit un niveau d'abstraction supérieur, facilitant la mise en œuvre et la gestion d'événements en temps réel. Socket.IO prend également en charge les mécanismes de secours pour les navigateurs qui ne prennent pas en charge WebSockets, garantissant ainsi une large compatibilité.

Avantages de Socket.IO :

  • Reconnexion automatique : tente automatiquement de se reconnecter si la connexion est perdue.
  • Espace de noms et salles : organise les connexions en espaces de noms et en salles, permettant une communication plus structurée.
  • Modèle basé sur les événements : prend en charge les événements personnalisés, rendant la communication plus sémantique.

Utiliser Socket.IO avec Node.js

Étape 1 : Installer Socket.IO

npm install socket.io

Étape 2 : configurer un serveur Socket.IO

const http = require('http');
const socketIo = require('socket.io');

// Create an HTTP server
const server = http.createServer();
const io = socketIo(server, {
    cors: {
        origin: "*",
        methods: ["GET", "POST"]
    }
});

// Handle client connection
io.on('connection', (socket) => {
    console.log('Client connected:', socket.id);

    // Listen for 'chat' events from the client
    socket.on('chat', (message) => {
        console.log('Received message:', message);
        // Broadcast the message to all connected clients
        io.emit('chat', `Server: ${message}`);
    });

    // Handle client disconnect
    socket.on('disconnect', () => {
        console.log('Client disconnected:', socket.id);
    });
});

server.listen(3000, () => {
    console.log('Socket.IO server running on http://localhost:3000');
});

Explication:

  • Un serveur HTTP est créé, et Socket.IO y est attaché.
  • L'événement de connexion gère les nouvelles connexions client.
  • L'événement de chat est un événement personnalisé permettant d'envoyer des messages de chat et d'émettre des messages diffusés à tous les clients.

Étape 3 : Créer un client Socket.IO



    <meta charset="UTF-8">
    <title>Socket.IO Chat</title>


    <input id="message" type="text" placeholder="Type a message">
    <button id="send">Send</button>
    
    <script> const socket = io('http://localhost:3000'); // Listen for chat messages from the server socket.on('chat', (message) => { const li = document.createElement('li'); li.textContent = message; document.getElementById('messages').appendChild(li); }); // Send message to server when button is clicked document.getElementById('send').addEventListener('click', () => { const message = document.getElementById('message').value; socket.emit('chat', message); }); </script>

    Sortir:

    Une fois le serveur exécuté et que vous ouvrez le fichier HTML dans plusieurs navigateurs, les messages saisis dans un navigateur seront envoyés au serveur et diffusés à tous les clients connectés.

    Flux Node.js

    Les flux sont essentiels pour gérer des fichiers volumineux ou des données en morceaux plutôt que de charger l'intégralité du contenu en mémoire. Ils sont utiles pour :

    • File Uploads/Downloads: Streams allow you to process data as it’s being uploaded or downloaded.
    • Handling Large Data: Streams are more memory efficient for handling large files or continuous data.

    Types of Streams in Node.js:

    1. Readable Streams: Streams from which data can be read (e.g., file system read).
    2. Writable Streams: Streams to which data can be written (e.g., file system write).
    3. Duplex Streams: Streams that can both be read from and written to (e.g., TCP sockets).
    4. Transform Streams: Streams that can modify or transform data as it is written and read (e.g., file compression).

    Example: Reading a File Using Streams

    const fs = require('fs');
    
    // Create a readable stream
    const readStream = fs.createReadStream('largefile.txt', 'utf8');
    
    // Listen to 'data' event to read chunks of data
    readStream.on('data', (chunk) => {
        console.log('Reading chunk:', chunk);
    });
    
    // Listen to 'end' event when the file is fully read
    readStream.on('end', () => {
        console.log('File reading complete');
    });
    

    Scaling Node.js Applications

    As your application grows, scaling becomes necessary to handle increased traffic and ensure high availability. Node.js applications can be scaled vertically or horizontally:

    • Vertical Scaling: Increasing the resources (CPU, RAM) of a single machine.
    • Horizontal Scaling: Running multiple instances of your Node.js application across different machines or cores.

    Cluster Module in Node.js

    Node.js runs on a single thread, but using the cluster module, you can take advantage of multi-core systems by running multiple Node.js processes.

    const cluster = require('cluster');
    const http = require('http');
    const numCPUs = require('os').cpus().length;
    
    if (cluster.isMaster) {
        // Fork workers for each CPU
        for (let i = 0; i  {
            console.log(`Worker ${worker.process.pid} died`);
        });
    } else {
        // Workers can share the same HTTP server
        http.createServer((req, res) => {
            res.writeHead(200);
            res.end('Hello, world!\n');
        }).listen(8000);
    }
    

    Conclusion

    WebSockets and Socket.IO offer real-time, bi-directional communication essential for modern web applications. Node.js streams efficiently handle large-scale data, and scaling with NGINX and Node’s cluster module ensures your application can manage heavy traffic. Together, these technologies enable robust, high-performance real-time applications.

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration
    Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
    Python vs JavaScript: environnements et outils de développementPython vs JavaScript: environnements et outils de développementApr 26, 2025 am 12:09 AM

    Les choix de Python et JavaScript dans les environnements de développement sont importants. 1) L'environnement de développement de Python comprend Pycharm, Jupyternotebook et Anaconda, qui conviennent à la science des données et au prototypage rapide. 2) L'environnement de développement de JavaScript comprend Node.js, VScode et WebPack, qui conviennent au développement frontal et back-end. Le choix des bons outils en fonction des besoins du projet peut améliorer l'efficacité du développement et le taux de réussite du projet.

    JavaScript est-il écrit en C? Examiner les preuvesJavaScript est-il écrit en C? Examiner les preuvesApr 25, 2025 am 12:15 AM

    Oui, le noyau du moteur de JavaScript est écrit en C. 1) Le langage C fournit des performances efficaces et un contrôle sous-jacent, qui convient au développement du moteur JavaScript. 2) Prendre le moteur V8 comme exemple, son noyau est écrit en C, combinant l'efficacité et les caractéristiques orientées objet de C. 3) Le principe de travail du moteur JavaScript comprend l'analyse, la compilation et l'exécution, et le langage C joue un rôle clé dans ces processus.

    Rôle de JavaScript: rendre le Web interactif et dynamiqueRôle de JavaScript: rendre le Web interactif et dynamiqueApr 24, 2025 am 12:12 AM

    JavaScript est au cœur des sites Web modernes car il améliore l'interactivité et la dynamicité des pages Web. 1) Il permet de modifier le contenu sans rafraîchir la page, 2) manipuler les pages Web via Domapi, 3) prendre en charge les effets interactifs complexes tels que l'animation et le glisser-déposer, 4) Optimiser les performances et les meilleures pratiques pour améliorer l'expérience utilisateur.

    C et JavaScript: la connexion expliquéeC et JavaScript: la connexion expliquéeApr 23, 2025 am 12:07 AM

    C et JavaScript réalisent l'interopérabilité via WebAssembly. 1) Le code C est compilé dans le module WebAssembly et introduit dans un environnement JavaScript pour améliorer la puissance de calcul. 2) Dans le développement de jeux, C gère les moteurs de physique et le rendu graphique, et JavaScript est responsable de la logique du jeu et de l'interface utilisateur.

    Des sites Web aux applications: les diverses applications de JavaScriptDes sites Web aux applications: les diverses applications de JavaScriptApr 22, 2025 am 12:02 AM

    JavaScript est largement utilisé dans les sites Web, les applications mobiles, les applications de bureau et la programmation côté serveur. 1) Dans le développement de sites Web, JavaScript exploite DOM avec HTML et CSS pour réaliser des effets dynamiques et prend en charge des cadres tels que JQuery et React. 2) Grâce à la réactnative et ionique, JavaScript est utilisé pour développer des applications mobiles multiplateformes. 3) Le cadre électronique permet à JavaScript de créer des applications de bureau. 4) Node.js permet à JavaScript d'exécuter le côté du serveur et prend en charge les demandes simultanées élevées.

    Python vs JavaScript: cas d'utilisation et applications comparéesPython vs JavaScript: cas d'utilisation et applications comparéesApr 21, 2025 am 12:01 AM

    Python est plus adapté à la science et à l'automatisation des données, tandis que JavaScript est plus adapté au développement frontal et complet. 1. Python fonctionne bien dans la science des données et l'apprentissage automatique, en utilisant des bibliothèques telles que Numpy et Pandas pour le traitement et la modélisation des données. 2. Python est concis et efficace dans l'automatisation et les scripts. 3. JavaScript est indispensable dans le développement frontal et est utilisé pour créer des pages Web dynamiques et des applications à une seule page. 4. JavaScript joue un rôle dans le développement back-end via Node.js et prend en charge le développement complet de la pile.

    Le rôle de C / C dans les interprètes et compilateurs JavaScriptLe rôle de C / C dans les interprètes et compilateurs JavaScriptApr 20, 2025 am 12:01 AM

    C et C jouent un rôle essentiel dans le moteur JavaScript, principalement utilisé pour implémenter des interprètes et des compilateurs JIT. 1) C est utilisé pour analyser le code source JavaScript et générer une arborescence de syntaxe abstraite. 2) C est responsable de la génération et de l'exécution de bytecode. 3) C met en œuvre le compilateur JIT, optimise et compile le code de point chaud à l'exécution et améliore considérablement l'efficacité d'exécution de JavaScript.

    JavaScript en action: Exemples et projets du monde réelJavaScript en action: Exemples et projets du monde réelApr 19, 2025 am 12:13 AM

    L'application de JavaScript dans le monde réel comprend un développement frontal et back-end. 1) Afficher les applications frontales en créant une application de liste TODO, impliquant les opérations DOM et le traitement des événements. 2) Construisez RestulAPI via Node.js et Express pour démontrer les applications back-end.

    See all articles

    Outils d'IA chauds

    Undresser.AI Undress

    Undresser.AI Undress

    Application basée sur l'IA pour créer des photos de nu réalistes

    AI Clothes Remover

    AI Clothes Remover

    Outil d'IA en ligne pour supprimer les vêtements des photos.

    Undress AI Tool

    Undress AI Tool

    Images de déshabillage gratuites

    Clothoff.io

    Clothoff.io

    Dissolvant de vêtements AI

    Video Face Swap

    Video Face Swap

    Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

    Outils chauds

    Bloc-notes++7.3.1

    Bloc-notes++7.3.1

    Éditeur de code facile à utiliser et gratuit

    Adaptateur de serveur SAP NetWeaver pour Eclipse

    Adaptateur de serveur SAP NetWeaver pour Eclipse

    Intégrez Eclipse au serveur d'applications SAP NetWeaver.

    ZendStudio 13.5.1 Mac

    ZendStudio 13.5.1 Mac

    Puissant environnement de développement intégré PHP

    MantisBT

    MantisBT

    Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

    PhpStorm version Mac

    PhpStorm version Mac

    Le dernier (2018.2.1) outil de développement intégré PHP professionnel