Getting started with Faye Pub/Sub Messaging on NodeJS
Faye ist ein Publish-Subscribe Messaging System, das auf dem Bayeux-Protokoll basiert und von James Coglan für NodeJS und Ruby implementiert wurde. Um ein Minimalsystem aufzusetzen sind nicht viele Schritte nötig und von dort sind jegliche Weiterentwicklungen denkbar, aber das hängt natürlich von eurem Gebrauch ab.
Falls ihr NodeJS noch nicht installiert habt, holt es jetzt nach.
Publish/Subscribe
Wer mit den Keywords nicht anfangen kann, sollte sich fix den passenden Wiki-Artikel durchlesen. Kurz gesagt: Pub/Sub arbeitet mit Channels auf die man Subscribed. Die auf einem vorhandenen Kanal gePublishten Nachrichten, werden an alle subscribten Clients weitergeleitet.
Faye Server
Zur Koordination der Clients, die sich auf die verschiedenen Kanäle subscriben, wird ein Faye Server benötigt. Dieser übernimmt die vollständige Organisation, welcher Client die jeweiligen publishten Nachrichten bekommen. Der Server kann auf zwei Arten erstellt werden und ist für die Clients unter dem angegebenen Mountpoint zu finden (siehe Faye Client). In diesem Beispiel ist der Mountpoint jeweils /faye.
Standalone
var faye = require('faye');
// Faye Server
var chat = new faye.NodeAdapter({mount: '/faye', timeout: 45});
chat.listen(8000);
Parallel zu einem vorhanden Webserver
var faye = require('faye');
var http = require('http');
// Faye Server
var chat = new faye.NodeAdapter({mount: '/faye', timeout: 45});
// Handle non-Bayeux requests
var server = http.createServer(function(request, response) {
response.writeHead(200, {'Content-Type': 'text/plain'});
response.write('Hello, non-Bayeux request');
response.end();
});
chat.attach(server);
server.listen(8000);
Server starten
Soll der Server auf einem Port kleiner als 1024 laufen, muss dieser mit sudo gestartet werden … ganz klassisch.
[sudo] node nameMeinesFayeServers.js
Faye Client
Ich beschreibe kurz was nötig ist, um einen rudimentären Browserclient zu starten. Erstellt eine neue HTML-Datei. Im ersten script-Tag wird die Faye-Library vom Server geladen, um die Funktionen für den Client bereitzustellen. Per JavaScript wird ein Client auf den Mountpoint des Server erstellt. Der Client kann nun auf die gewünschten Channels subscriben und publishen. In meinem Beispiel published er in den messages-Channel und startet ein Alert-Dialog, sobald er eine Nachricht von diesem empfängt.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Faye Client</title>
<script type="text/javascript" src="http://localhost:8000/faye.js">
</script>
<script type="text/javascript">
var client = new Faye.Client('http://localhost:8000/faye');
client.subscribe('/messages', function(message) {
alert('Got a message: ' + message.text);
});
client.publish('/messages', {text: 'Hello world'});
</script>
</head>
<body>
</body>
</html>
Faye Client testen
Einfach die HTML-Datei im Browser öffnen um einen Client zu starten. Damit der Alert-Dialog hochkommt, einfach einen zweiten Client (die Datei ein zweites Mal öffnen) starten.
Eine ausführlichere Dokumentation zu Faye bekommt ihr auf dessen Projektseite. Mein Beispielcode ist komplett an den Code aus den Docs angelehnt. Daher solltet ihr bei Problemen keine Orientierungsschwierigkeiten haben.