Ausgabe:

Sobald der Server läuft und Sie die HTML-Datei in mehreren Browsern öffnen, werden in einem Browser eingegebene Nachrichten an den Server gesendet und an alle verbundenen Clients gesendet.

Node.js-Streams

Streams sind wichtig, um große Dateien oder Daten in Blöcken zu verarbeiten, anstatt den gesamten Inhalt in den Speicher zu laden. Sie sind nützlich für:

Arten von Streams in Node.js:

  1. Lesbare Streams: Streams, aus denen Daten gelesen werden können (z. B. Dateisystem lesen).
  2. Beschreibbare Streams: Streams, in die Daten geschrieben werden können (z. B. Dateisystemschreibvorgänge).
  3. Duplex-Streams: Streams, von denen sowohl gelesen als auch geschrieben werden kann (z. B. TCP-Sockets).
  4. Transformations-Streams: Streams, die Daten beim Schreiben und Lesen ändern oder transformieren können (z. B. Dateikomprimierung).

Beispiel: Lesen einer Datei mithilfe von Streams

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

Skalieren von Node.js-Anwendungen

Wenn Ihre Anwendung wächst, wird eine Skalierung erforderlich, um den erhöhten Datenverkehr zu bewältigen und eine hohe Verfügbarkeit sicherzustellen. Node.js-Anwendungen können vertikal oder horizontal skaliert werden:

Cluster-Modul in Node.js

Node.js läuft auf einem einzelnen Thread, aber mit dem Cluster-Modul können Sie die Vorteile von Multi-Core-Systemen nutzen, indem Sie mehrere Node.js-Prozesse ausführen.

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

Abschluss

WebSockets und Socket.IO bieten bidirektionale Echtzeitkommunikation, die für moderne Webanwendungen unerlässlich ist. Node.js-Streams verarbeiten große Datenmengen effizient und die Skalierung mit NGINX und dem Cluster-Modul von Node stellt sicher, dass Ihre Anwendung starken Datenverkehr bewältigen kann. Zusammen ermöglichen diese Technologien robuste, leistungsstarke Echtzeitanwendungen.

","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"}}
„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > WebSockets, Socket.IO und Echtzeitkommunikation mit Node.js

WebSockets, Socket.IO und Echtzeitkommunikation mit Node.js

Veröffentlicht am 02.11.2024
Durchsuche:732

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

Echtzeitkommunikation ist zu einem Schlüsselmerkmal moderner Anwendungen geworden und ermöglicht sofortige Aktualisierungen, Live-Datenaustausch und reaktionsfähige Benutzererlebnisse. Technologien wie WebSockets und Socket.IO stehen an der Spitze der Echtzeitinteraktionen. Dieser Artikel befasst sich mit den Konzepten von WebSockets, wie man sie in Node.js implementiert und wie Socket.IO die Echtzeitkommunikation vereinfacht.

Was ist WebSocket?

WebSocket ist ein Kommunikationsprotokoll, das Vollduplex-Kommunikationskanäle über eine einzige TCP-Verbindung bereitstellt. Im Gegensatz zum HTTP-Protokoll, das nach einem Anfrage-Antwort-Modell arbeitet, ermöglicht WebSocket dem Server und dem Client, jederzeit Nachrichten aneinander zu senden und dabei eine offene Verbindung aufrechtzuerhalten.

Hauptmerkmale:

  • Persistente Verbindung: WebSocket hält die Verbindung offen und reduziert so die Notwendigkeit, Verbindungen erneut herzustellen.
  • Bidirektionale Kommunikation: Sowohl Server als auch Client können Nachrichten frei senden.
  • Geringe Latenz: Da WebSocket eine offene Verbindung aufrechterhält, entfällt der Overhead von HTTP-Anfragen, wodurch die Latenz reduziert wird.

Wann sollten WebSockets verwendet werden?

WebSockets sind ideal für Anwendungen, die einen Echtzeit-Datenaustausch mit geringer Latenz erfordern:

  • Chat-Anwendungen (z. B. Slack, WhatsApp Web)
  • Live-Sport-Updates
  • Börsen-Feeds
  • Tools für die Zusammenarbeit in Echtzeit (z. B. Google Docs)

Einrichten von WebSocket in Node.js

Node.js unterstützt WebSocket nativ über das ws-Paket, eine schlanke und effiziente Bibliothek für die WebSocket-Kommunikation.

Schritt 1: Installieren Sie das WebSocket-Paket

npm install ws

Schritt 2: Erstellen Sie einen WebSocket-Server

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

Erläuterung:

  • Ein WebSocket-Server überwacht Port 8080.
  • Das Verbindungsereignis wird ausgelöst, wenn ein Client eine Verbindung herstellt.
  • Das Nachrichtenereignis wird ausgelöst, wenn der Server Daten vom Client empfängt, die er dann zurücksendet.

Schritt 3: Erstellen Sie einen WebSocket-Client

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

Ausgabe:

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

Was ist Socket.IO?

Socket.IO ist eine beliebte Bibliothek, die auf WebSockets aufbaut und die Echtzeitkommunikation vereinfacht. Es bietet eine Abstraktion auf höherer Ebene und erleichtert so die Implementierung und Verwaltung von Echtzeitereignissen. Socket.IO unterstützt auch Fallback-Mechanismen für Browser, die WebSockets nicht unterstützen, und gewährleistet so eine breite Kompatibilität.

Vorteile von Socket.IO:

  • Automatische Wiederverbindung: Versucht automatisch, die Verbindung wiederherzustellen, wenn die Verbindung verloren geht.
  • Namespace und Räume: Organisiert Verbindungen in Namespaces und Räume und ermöglicht so eine strukturiertere Kommunikation.
  • Ereignisgesteuertes Modell: Unterstützt benutzerdefinierte Ereignisse und macht die Kommunikation semantischer.

Verwendung von Socket.IO mit Node.js

Schritt 1: Installieren Sie Socket.IO

npm install socket.io

Schritt 2: Richten Sie einen Socket.IO-Server ein

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

Erläuterung:

  • Ein HTTP-Server wird erstellt und Socket.IO wird daran angehängt.
  • Das Verbindungsereignis verarbeitet neue Clientverbindungen.
  • Das Chat-Ereignis ist ein benutzerdefiniertes Ereignis zum Senden von Chat-Nachrichten und sendet die Nachrichten an alle Clients.

Schritt 3: Erstellen Sie einen Socket.IO-Client



    
    Socket.IO Chat


    
    
    

    Ausgabe:

    Sobald der Server läuft und Sie die HTML-Datei in mehreren Browsern öffnen, werden in einem Browser eingegebene Nachrichten an den Server gesendet und an alle verbundenen Clients gesendet.

    Node.js-Streams

    Streams sind wichtig, um große Dateien oder Daten in Blöcken zu verarbeiten, anstatt den gesamten Inhalt in den Speicher zu laden. Sie sind nützlich für:

    • Datei-Uploads/Downloads: Mit Streams können Sie Daten verarbeiten, während sie hoch- oder heruntergeladen werden.
    • Verarbeitung großer Datenmengen: Streams sind speichereffizienter für die Verarbeitung großer Dateien oder kontinuierlicher Daten.

    Arten von Streams in Node.js:

    1. Lesbare Streams: Streams, aus denen Daten gelesen werden können (z. B. Dateisystem lesen).
    2. Beschreibbare Streams: Streams, in die Daten geschrieben werden können (z. B. Dateisystemschreibvorgänge).
    3. Duplex-Streams: Streams, von denen sowohl gelesen als auch geschrieben werden kann (z. B. TCP-Sockets).
    4. Transformations-Streams: Streams, die Daten beim Schreiben und Lesen ändern oder transformieren können (z. B. Dateikomprimierung).

    Beispiel: Lesen einer Datei mithilfe von 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');
    });
    

    Skalieren von Node.js-Anwendungen

    Wenn Ihre Anwendung wächst, wird eine Skalierung erforderlich, um den erhöhten Datenverkehr zu bewältigen und eine hohe Verfügbarkeit sicherzustellen. Node.js-Anwendungen können vertikal oder horizontal skaliert werden:

    • Vertikale Skalierung: Erhöhung der Ressourcen (CPU, RAM) einer einzelnen Maschine.
    • Horizontale Skalierung: Ausführen mehrerer Instanzen Ihrer Node.js-Anwendung auf verschiedenen Maschinen oder Kernen.

    Cluster-Modul in Node.js

    Node.js läuft auf einem einzelnen Thread, aber mit dem Cluster-Modul können Sie die Vorteile von Multi-Core-Systemen nutzen, indem Sie mehrere Node.js-Prozesse ausführen.

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

    Abschluss

    WebSockets und Socket.IO bieten bidirektionale Echtzeitkommunikation, die für moderne Webanwendungen unerlässlich ist. Node.js-Streams verarbeiten große Datenmengen effizient und die Skalierung mit NGINX und dem Cluster-Modul von Node stellt sicher, dass Ihre Anwendung starken Datenverkehr bewältigen kann. Zusammen ermöglichen diese Technologien robuste, leistungsstarke Echtzeitanwendungen.

    Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/imsushant12/websockets-socketio-and-real-time-communication-with-nodejs-4ea0?1 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen Es
    Neuestes Tutorial Mehr>

    Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

    Copyright© 2022 湘ICP备2022001581号-3