Die Bibliothek ws: WebSocket für Node.js
Die Bibliothek ws ist eine einfache, schnelle und vollständig getestete Implementierung des WebSocket-Protokolls für Node.js. Sie ist der De-facto-Standard für die Erstellung von Echtzeitanwendungen (Chats, Online-Spiele, Benachrichtigungen, gemeinsame Bearbeitung) auf der Serverseite von JavaScript. Im Gegensatz zum integrierten http-Modul bietet ws eine vollwertige bidirektionale Kommunikation zwischen Client und Server ohne ständige HTTP-Anfragen.
Hauptfunktionen
- Vollständige Unterstützung des RFC 6455-Protokolls – funktioniert mit allen modernen Browsern.
- Hohe Leistung – minimaler Speicherverbrauch und geringe Latenz.
- Einfache API – Server- und Client-Erstellung in wenigen Codezeilen.
- Unterstützung für Erweiterungen – Datenkomprimierung (permessage-deflate).
- Integration mit HTTP-Server – Port kann mit Express oder anderen Frameworks geteilt werden.
- Automatische Wiederverbindung – integrierte Mechanismen für den Client.
Installation
Installation über npm:
npm install wsNach der Installation ist die Bibliothek einsatzbereit.
Erstellen eines WebSocket-Servers
Wir erstellen einen einfachen Server, der Verbindungen annimmt und eine Begrüßungsnachricht sendet:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) { console.log('Neuer Client verbunden');
// Nachricht an den Client senden ws.send('Willkommen auf dem WebSocket-Server!');
// Eingehende Nachrichten verarbeiten ws.on('message', function incoming(message) { console.log('Empfangen: %s', message); // Zurücksenden (Echo) ws.send('Echo: ' + message); });
// Verbindungsabbruch verarbeiten ws.on('close', function() { console.log('Client getrennt'); });});
console.log('WebSocket-Server gestartet unter ws://localhost:8080');Erstellen eines WebSocket-Clients
Der Client verbindet sich mit dem Server, sendet eine Nachricht und erhält eine Antwort:
const WebSocket = require('ws');
const ws = new WebSocket('ws://localhost:8080');
ws.on('open', function open() { console.log('Verbindung hergestellt'); ws.send('Hallo, Server!');});
ws.on('message', function incoming(data) { console.log('Antwort vom Server: %s', data); ws.close();});
ws.on('close', function() { console.log('Verbindung geschlossen');});
ws.on('error', function error(err) { console.error('Fehler:', err.message);});Arbeiten mit JSON und mehreren Clients
Ein reales Beispiel – ein Chat-Server, der Nachrichten an alle verbundenen Clients sendet (Broadcast):
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws, req) { console.log('Client verbunden. Gesamtanzahl Clients:', wss.clients.size);
ws.on('message', function incoming(message) { // JSON parsen let data; try { data = JSON.parse(message); } catch (e) { ws.send(JSON.stringify({ error: 'Ungültiges JSON' })); return; }
// An alle außer dem Absender senden wss.clients.forEach(function each(client) { if (client !== ws && client.readyState === WebSocket.OPEN) { client.send(JSON.stringify({ username: data.username, text: data.text, timestamp: Date.now() })); } }); });
ws.send(JSON.stringify({ system: 'Willkommen im Chat!' }));});Der Client kann JSON senden:
ws.send(JSON.stringify({ username: 'Alice', text: 'Hallo zusammen!' }));Integration mit HTTP-Server
Auch in der Bibliothek
Redis-Client für PHP: Predis — Installation, Verbindung, Beispiele
HTTP-Client für Go (Golang): Top-Bibliotheken für die Arbeit mit HTTP
Datenvalidierung in JavaScript (Node.js) mit Joi und Yup
MailKit für C# (.NET): Komplettguide mit Praxisbeispielen