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 :

Types de flux dans Node.js :

  1. Flux lisibles : flux à partir desquels les données peuvent être lues (par exemple, lecture du système de fichiers).
  2. Flux inscriptibles : flux dans lesquels les données peuvent être écrites (par exemple, écriture sur le système de fichiers).
  3. Flux duplex : flux pouvant à la fois être lus et écrits (par exemple, les sockets TCP).
  4. Flux de transformation : flux qui peuvent modifier ou transformer les données au fur et à mesure de leur écriture et de leur lecture (par exemple, compression de fichiers).

Exemple : lecture d'un fichier à l'aide de flux

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

Mise à l'échelle des applications Node.js

À mesure que votre application se développe, une mise à l'échelle devient nécessaire pour gérer l'augmentation du trafic et garantir une haute disponibilité. Les applications Node.js peuvent être mises à l'échelle verticalement ou horizontalement :

Module de cluster dans Node.js

Node.js s'exécute sur un seul thread, mais en utilisant le module cluster, vous pouvez tirer parti des systèmes multicœurs en exécutant plusieurs processus Node.js.

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 < numCPUs; i  ) {        cluster.fork();    }    cluster.on(\\'exit\\', (worker, code, signal) => {        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 et Socket.IO offrent une communication bidirectionnelle en temps réel essentielle pour les applications Web modernes. Les flux Node.js gèrent efficacement les données à grande échelle, et la mise à l'échelle avec NGINX et le module de cluster de Node garantit que votre application peut gérer un trafic important. Ensemble, ces technologies permettent des applications en temps réel robustes et hautes performances.

","image":"http://www.luping.net/uploads/20240927/172744885266f6c714068ca.jpg","datePublished":"2024-11-02T05:36:07+08:00","dateModified":"2024-11-02T05:36:07+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > WebSockets, Socket.IO et communication en temps réel avec Node.js

WebSockets, Socket.IO et communication en temps réel avec Node.js

Publié le 2024-11-02
Parcourir:294

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 les 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



    Socket.IO Chat
    

    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 :

    • Téléchargements/Téléchargements de fichiers : les flux vous permettent de traiter les données au fur et à mesure de leur téléchargement.
    • Gestion des données volumineuses : les flux sont plus efficaces en termes de mémoire pour gérer des fichiers volumineux ou des données continues.

    Types de flux dans Node.js :

    1. Flux lisibles : flux à partir desquels les données peuvent être lues (par exemple, lecture du système de fichiers).
    2. Flux inscriptibles : flux dans lesquels les données peuvent être écrites (par exemple, écriture sur le système de fichiers).
    3. Flux duplex : flux pouvant à la fois être lus et écrits (par exemple, les sockets TCP).
    4. Flux de transformation : flux qui peuvent modifier ou transformer les données au fur et à mesure de leur écriture et de leur lecture (par exemple, compression de fichiers).

    Exemple : lecture d'un fichier à l'aide de flux

    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');
    });
    

    Mise à l'échelle des applications Node.js

    À mesure que votre application se développe, une mise à l'échelle devient nécessaire pour gérer l'augmentation du trafic et garantir une haute disponibilité. Les applications Node.js peuvent être mises à l'échelle verticalement ou horizontalement :

    • Mise à l'échelle verticale : augmentation des ressources (CPU, RAM) d'une seule machine.
    • Mise à l'échelle horizontale : exécution de plusieurs instances de votre application Node.js sur différentes machines ou cœurs.

    Module de cluster dans Node.js

    Node.js s'exécute sur un seul thread, mais en utilisant le module cluster, vous pouvez tirer parti des systèmes multicœurs en exécutant plusieurs processus Node.js.

    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 et Socket.IO offrent une communication bidirectionnelle en temps réel essentielle pour les applications Web modernes. Les flux Node.js gèrent efficacement les données à grande échelle, et la mise à l'échelle avec NGINX et le module de cluster de Node garantit que votre application peut gérer un trafic important. Ensemble, ces technologies permettent des applications en temps réel robustes et hautes performances.

    Déclaration de sortie Cet article est reproduit sur : https://dev.to/imsushant12/websockets-socketio-and-real-time-communication-with-nodejs-4ea0?1 En cas de violation, veuillez contacter [email protected] pour supprimer il
    Dernier tutoriel Plus>

    Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

    Copyright© 2022 湘ICP备2022001581号-3