Node.js Websocket
Willemers Informatik-Ecke
Normalerweise fragt der Client den Server und erhält daraufhin eine Antwort, oft in Form von HTML-Daten. Die Kommunikationsrichtung ist eindeutig. Der Client meldet sich, wenn er etwas will. Der Server schläft, bis er geweckt wird.

Websockets ermöglichen eine bidirektionale Verbindung zwischen Client und Server. Die entsprechende API ist im Browser bereits vorhanden und kann über JavaScript angesprochen werden. Node enthält ebenfalls eine Websocket-Schnittstelle.

Der Server

Unter Node kann ein Websocket über das Modul ws angefordert werden.

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

wss.on('connection', function(ws) {
    ws.on('message', function(message) {
        setInterval( function() {
            zahl = zahl + 1;
            ws.send(""+zahl);
        }, 1000); // alle Sekunde
    });
    ws.on('close', function() {
    });
});
Der Websocket-Server wird durch eine Anmeldung vom Client angestoßen. Im Beispiel wird daraufhin alle Sekunde eine neue Zahl an den Client gesandt.

Websocket-Verbindung vom Client

Die HTML-Datei benötigt einen JavaScript-Teil, der den Websocket-Verkehr übernimmt.

<html>
<body>

<button id="mybut">Send button-click to Server</button>
<h1> Zahlen </h1>
<ul id="zahlen"></ul>

<script>
const ws = new WebSocket('ws://localhost:8080');
ws.onopen = function() {
    console.log('onopen');
};

ws.onerror = function(error) {
    console.error(error);
};

ws.onclose = function() {
    console.log('onclose');
};

ws.onmessage = function(event) {
    let newElement = document.createElement("li");
    newElement.textContent = event.data;
    let ul = document.querySelector("#zahlen")
    ul.appendChild(newElement)
};

const btn = document.querySelector("#mybut");
btn.addEventListener("click", function(event) {
    ws.send('Button geklickt');
});
</script>
</body>
</html>
Die Verbindung wird beim Laden der Webseite hergestellt. Das Senden der Nachricht, die den Server veranlasst, Pakete zu senden, erfolgt im EventListener des Buttons.

Sobald eine Nachricht vom Server eintrifft, wird onmessage aufgerufen, das die ul-Komponente um neue li-Elemente erweitert.