Socket.IO – Echtzeit-Kommunikation zwischen Server und Client

Socket.IOSocket.IO ist ein Modul für Node.js, mit der sich Echtzeit-Webanwendungen realisieren lassen. Das Modul besteht aus aus zwei Komponenten: einer serverseitigen Bibliothek für Node.js, und einer clientseitgen JavaScript-Bibliothek.

Die Kommunikation zwischen Server und Webbrowser (Client) erfolgt im Idealfall über eine WebSocket-Verbindung. Falls das WebSocket-Protokoll vom Browser nicht unterstützt wird, so findet ein Fallback auf eine alternative Technologie statt.

Socket.IO kennt insgesamt 6 Kommunikations-Technologien:

  1. WebSocket
  2. Adobe® Flash® Socket
  3. AJAX long polling
  4. AJAX multipart streaming
  5. Forever Iframe
  6. JSONP Polling

Diese werden in absteigender Reihenfolge verwendet. Steht eine Technolgie also nicht zu Verfügung, so geht es mit der jeweils nächsten weiter.

Update: Seit Version 1.0 verwendet Socket.io eine neue Strategie: Anstatt es als erstes mit einer WebSocket-Verbindung zu versuchen, startet Socket.io nun eine als erstes eine XHR- oder JSONP-Anfrage. Erst danach wird versucht, auf eine richtige WebSocket-Verbindung upzugraden. So wird die Verbindung für Besucher ohne richtige WebSocket-Unterstützung sehr viel schneller aufgebaut, da hierfür keine Fallback-Timeouts mehr beachtet werden müssen.

Funktionsweise & API #

Socket.IO dient als Abstraktionsschicht und stellt eine einheitliche API bereit – unabhängig davon, welche der 6 Technologien jeweils verwendet wird.

Zuerst verbindet sich ein Client mit dem Server, der wiederum mehrere Clients verwalten kann. Mit der Funktion socket.emit('test', {}) werden Daten vom Client oder Server aus gesendet, und mit socket.on('test', function(data){}) auf der anderen Seite empfangen.

Auf dem Server stehen außerdem die Funktionen sockets.emit() und sockets.on() zur Verfügung, die an alle Teilnehmer senden bzw. von allen Teilnehmern empfangen.

Verteiler (Broadcasting) #

Um Daten von einem Client an alle anderen zu senden, muss der Server die Daten zunächst entgegennehmen und danach an alle anderen Teilnehmer senden. Dies ist mit der serverseitigen Funktion socket.broadcast.emit() möglich, welche die Daten an alle anderen Clients verteilt.

Der serverseitige Code dazu könnte so aussehen:

io.sockets.on('test', function (socket, data) {
  socket.broadcast.emit('test', data);
});

Die nachfolgende Grafik verdeutlicht die Funktionsweise eines Verteilers:
server-clientVollständige Code-Beispiele gibt es im offiziellem How to use.

Installation #

Die Installation von Socket.IO geht schnell und einfach, man muss lediglich eine Zeile in die Konsole eingeben:

npm install socket.io

Nach erfolgreicher Installation kann man das Modul mit require('socket.io') in eine Node.js-Anwendung laden, und Socket.IO verwenden.

Weiterführende Informationen befinden sich auf der Socket.IO Website und im Github-Wiki. Außerdem habe ich ein deutsches Tutorial zu Socket.IO geschrieben, in dem eine einfache Chat-Anwendung entwickelt wird.

Wer weitere deutsche Artikel zu Socket.IO auf anderen Websites sucht, der findet diese unter Anderem hier:

VN:F [1.9.22_1171]
Bewertung: 4.2/5 (12 Bewertungen)
Socket.IO – Echtzeit-Kommunikation zwischen Server und Client, 4.2 out of 5 based on 12 ratings
Regelmäßige Beiträge über Node.js

nodecodeAbonniere den kostenlosen NodeCode-Newsletter, und bleibe auf dem laufenden über neue Beiträge zum Thema Node.js. Darunter:

  • Informationen und Neuigkeiten rund um Node.js und zugehörigen Modulen
  • Vorstellung von interessanten Frameworks und Bibliotheken
  • Anleitungen und Tutorials zu Node.js und weiterführenden Technologien
  • Sowie vieles mehr...

hinterlasse einen Kommentar