MessageBus Communication Server

Übersicht

Der MessageBus Communication Server, kurz MBCS, implementiert einen MessageBus zur Kommunikation einer große Anzahl Clients über dauerhafte Verbindungen.

Ziel ist, das Clients sich so einfach wie möglich mit gemeinsamen Datenobjekten verbinden und Nachrichten untereinander austauschen können. Änderungen von Datenobjekten sollen zeitnah automatisch an alle verbunden Clients per Push-Technik repliziert werden.

Remote Clients verbinden sich über HTTP z.B. via Apache, COMET (forever-iframe oder XHR-Streaming), WebSockets oder native IP-Sockets. Serveranwendungen können über IPC-Mechanismen, wie Pipes, Unix Domain Sockets, IP-Sockets oder auch Shared Memory mit dem MBCS Daten austauschen oder Nachrichten versenden.

JavaScript Business Objects (JSBOs) können im Webbrowser transparent MBCS-Datenobjekte abbilden. Änderungen and den Serverdatenobjekten werden an die verbundenen JSBOs per Push-Technik repliziert und können entsprechende Events auf dem Client auslösen, um z.B. die visuelle Darstellung von Daten zu aktualisieren.

Andere verbundenen Prozesse können z.B. Daten persistieren, auswerten und ggf. Alarmierungen auslösen, Vorgänge aufzeichen (Logging) oder anderweitig weiterverarbeiten und Ergebnisse ggf. wieder an den MBCS zurückübermitteln.

Der MBCS kann weitere Prozesse starten, entweder per Konfiguartion beim Start, per CLI oder per Befehl von einem verbundenen Client. Die Kommunikation der vom MBS kontrollierten Prozesse kann über IPC oder STDIO erfolgen.

Der Server integriert ein Modul, daß bei Bedarf Datenobjekte automatisch beim ersten Zugriff generieren kann, d.h. sie müssen nicht explizit angelegt werden. Datenobjekte können aber auch explizit angelegt und mit spezifischen Eigenschaften parametriert werden. Auch ist es möglich, Zugriffe auf Objekte an spezifische Controller zu routen.

Anwendungsmöglichkeiten:

  • Prozessvisualisierung
  • Analgenüberwachung und -steuerung
  • Gebäudeüberwachung
    (Schließanlagen, Parkhausauslastung, Strom-/Wasserverbrauch, Klimaanlage, Beleuchtung etc.)
  • Echtzeit-Mapping-Anwendungen
    (Fahrzeug-, Waren- oder Personenverfolgung, FCD, aktuelle Verkehrssitutaion, Alarmierungen mit Positionsangaben, Wetterstationsdaten in Echtzeit etc.)
  • Buchungssysteme mit Auslastungsanzeige
  • Stock-Trading-Applications
  • Co-Edit von Dokumenten
  • Multiplayer Games
  • eMail-Client mit Push-Technologie
  • Nachrichtenticker
  • Collaborationtools
    (Chat, Whiteboard, ...)

Der MBCS ist für Webanwendungen geeignet, aber natürlich auch für native Desktopanwendungen. Der Unterschied zu einem Standard-Webserver ist die Auslegung für eine große Anzahl dauerhafter bidirektionaler Client-Server-Verbindungen.

Besonders in Verbindung mit JSBO sind auf einfache Weise hoch interaktive Webanwendung realisierbar. Es ist auch möglich, die Darstellung selbst über den MBCS auszuliefern und damit, je nach Anwendungsfall, auf einen http-Server zu verzchten. In Verbindung mit HTAX eröffnen sich darüberhinaus viele weitere Möglichkeiten.

Beispiele

Visualisierung und Steuerung eines Testracks

Kombination MBCS mit JSBO

Im folgenden Beispiel wird die Variable data via WebSocket über Port 81 des MBCS mit dem Serverdatenobjekt /pfad/zum/daten/objekt verbunden und der Member show angezeigt und geändert:

<script src='/myapp/jslib.js'>
...
var data = $.mbcs("ws://triess.de:81/pfad/zum/daten/objekt");
alert(data.$('show'));
data.set('show', true);
...

Die Methode $.mbcs(...) liefert hier ein JSBO zurück, das praktisch einen Proxy auf das Serverdatenobjekt darstellt.

Ein explizites Anlegen der Datenstruktur /pfad/zum/daten/objekt auf dem Server ist dabei nicht unbedingt erforderlich. Sie kann bei Bedarf automatisch vom MBCS generiert werden.

Mit dem folgenden Code wird bei Änderung des Wertes data.$('show') das Element div1 entsprechend ein- oder ausgeblendet:

...
data.$('show').onchange(
  function(value){div1.style.display = value ? '' : 'none'};
); 
...

Mit dem Befehl data.set('show', true); kann anschließend div1 eingeblendet werden.

JSBO erlaubt auch die Erstellung von mehr deklarativen Bindings von Datenobjekten oder Eigenschaften direkt an HTML-Elemente oder, in moderneren Webbrowsern, auch an eingebettete SVG-DOM-Objekte. Damit ist eine direkte grafische Darstellung der Daten quasi in Echtzeit möglich. Im Internet-Explorer können Daten auch an VML-Objekte gebunden werden. Ab Version 9 wird der Internet-Explorer ebenfalls SVG ohne PlugIn unterstützen. Ein Beispiel zur Verwendung mit SVG wäre z.B. die Darstellung von Füllständen in Tanks, Zeigerinstrumente, Diagramme oder vieles andere mehr.

Technik

Architektur:

Das folgende Diagramm stellt einen groben Entwurf der Archtitektur da und wird z.Z. noch überarbeitet.

MBCS Server Daemon:

  • Konfiguration über Config-Datei
  • Start von der Konsole oder über init.d
  • IPC: Pipes, Unix Domain Sockets
  • Internet: IP-Sockets (native), WebSockets, PHP Support Interface, Comet (forever-IFrame/XHR-Streaming)
  • PHP-Support: Server Class, Client Class
  • Start/Stop externer Prozesse, Datenaustausch über Standard-I/O (stdin, stdout, stderr)
  • Command Line Interface (CLI)
  • MBCS-Konsole
  • Dynamisches Laden von PHP-Modulen

Weiterverarbeitung der Daten

Sollen Daten auf dem Server weiterverarbeitet werden (z.B. Logging, Persistenz, komplexe Berechnungen u.a.m.), kann sich ein lokaler Client (z.B. ein PHP-Script) per IPC in den Serverprozess einklingen, die Daten synchron oder asynchron verarbeiten und Ergebnisse bei Bedarf wieder an die verbundenen Clients zurückgeben.

Externe Prozesse

Der MBCS kann externe Prozesse starten, stoppen und mit diesen über IPC oder auch stdin/stdout/stderr kommunizieren. Ein vom MBCS gestarteter Prozess läuft solange, bis er explizit gestoppt bzw. der MBCS selbst beendet wird. Über eine Konfigurationsdatei kann angegeben werden, welche Prozesse automatisch beim Start des Servers mit gestartet werden sollen.

Implementierung

Aktuell steht mit dem MBCS.php eine PHP-Implementation zur Verfügung. Der MBCS.php ist für den produktiven Betrieb konzipiert. Er enthält noch nicht alle Module und erreicht nicht die Performance einer C/C++-Implementation, da mit PHP konzeptionell einige Einschränkungen gegeben sind.

Der MBCS.php als auch ggf. zu ladende Module und Prozesse sind als Serveranwendungen für eine lange Laufzeit ausgelegt. Sie werden beim Start ggf. einmalig compiliert und verbleiben als laufende Prozesse im Speicher. Dadurch ist der Performance-Verlust im laufenden Betrieb gering. Der MBCS.php kann bei moderaten Hardwareanforderungen eine große Anzahl Client-Verbindungen bedienen.

Der MBCS.php ist als Unix Daemon realisiert und kann für einer Vielzahl von Unix-Systemen init.d-Scripts generieren und sich für den Autostart einrichten. Für Testzwecke ist auch der Start als Konsolenanwendung möglich.

Der MBCS befindet sich aktuell in Entwicklung, so daß sich sicher noch einige Änderungen ergeben können.

WebSockets

Der MBCS.php verwendet zur Kommunikation mit ServerProzessen aktuell ein FIFO-Interface. Eine PHP-Klasse kapselt die Kommunikation mit dem MBCS.php. Eine bessere Lösung ist jedoch die Verwendung von Unix Domain Sockets.

Über COMET via 'forever-iframe' kann eine dauerhafte Verbindung zu den Clients aufgebaut werden. Die Verwendung von COMET/forever-iframe via Apache etc. schränkt die Anzahl der gleichzeitig verbundenen Clients jedoch stark ein. Ein Internet Socket-Interface erlaubt eine unmittelbare bidirektionale Verbindung mit dem Server mit sehr geringem Overhead bei der Datenübetragung.

Der MBCS.php implementiert deshalb auch IP-Sockets im Multiplexing-Verfahren. Das Multiplexing-Verfahren ist eine sehr leistunsgfähige Methode zur Realisierung einer großen Anzahl dauerhafter Client-Verbindungen. Weiterhin ist ein WebSocket-Handshake implementiert, so daß der MBS auch WebSocket-Verbindungen unterstützen kann. Das ist z.Z. Die eleganteste Methode zur dauerhaften Verbindung von Webbrowseranwendungen mit einem Webserver und in Zukunft vielleicht auch nativen Client-Anwendungsprogrammen.

Unterstützte Webbrowser

Zur Zeit werden WebSockets nur von wenigen Webbrowsern unterstützt. Um auch für ältere WebBrowser WebSockets zur Verfügung stellen zu können, wird aktuell die Implementation eines Client-WebSocket-Interface unter Nutzung von Adobe-Flash untersucht.

Nächste Schritte:

  • Untersuchung diverser Serialisierungen und Kommunikationsprotokolle
  • Implementation Sockets/WebSockets für Webbrowser
  • Implementation Unix Domain Sockets für IPC

Serialisierung und Kommunikationsprotokolle

Aktuell wird PHP-Serialisierung und JSON für die Kommunikation verwendet, sowie ein spezifischess Protokoll zur Datenübertragung. Untersucht wird aber auch die Verwendung z.B. des Hessian-Protokolls, des MemcacheBinaryProtocol und anderer mehr. Ziel ist, eine effektive Datenübertragung und Serialisierung/Deserialisierung zu finden, dabei aber eine Abhängigkeit von einer bestimmten Programmiersprache zu vermeiden.

Implementation IP-Sockets/WebSockets für Webbrowser

Clientseitig werden WebSockets z.Z. nur von Google Chrom unterstützt. Es ist jedoch möglich, z.B. mittels Adobe Flash, ein Socket-Interface auch im Webbrwoser zur Verfügung zu stellen. Um WebSockets zu verwenden, muß dazu ergänzend das WebSocket-Handshake implementiert werden.

Implementation Unix Domain Sockets für IPC

Die Interprozesskommunikation mit dem MBCS-Prototypen erfolgt z.Z. über Pipes. Für PHP-Clients ist die Verbindung zum MBCS durch entsprechende Klassen transparent gekapselt. Die elegantere Variante ist jedoch die Verwendung von Unix Domain Sockets. Es wäre auch möglich, Shared Memory auf ein Socket Interface abzubilden.

Realisierung:

Server und Client-Klassen sind z.Z. modular in PHP realisert. Es ist problemlos möglich, die Klassen entsprechend anzupassen und für eigene Entwicklungen zu verwenden.

JSBO

JavaScript Business Objects (JSBO) sind eine Realisierung von JavaScript-Objekten, die u.a. Setter, Getter, Event-Interfaces, Bindings sowie eine Reihe weiterer spezifischer Techniken implementiert. Damit ist es möglich, verknüpfte Inhalte, wie z.B. HTML-DOM-Objekte oder auch SVG-Objekte automatisch zu aktualisieren.

JSBOs können direkt mit MBCS Datenobjekten verbunden sein. Eine Änderung der MBCS-Datenobjekte führt automatisch zur Aktualisierung der verbundenen JSBOs und kann somit unmittelbar in einer Webanwendung angezeigt werden.

HTAX

HTAX ist eine Windows-Frontend-Runtime-Technologie für Internet-/Intranetanwendungen. Die Darstellung erfolgt ähnlich wie bei HTA im eigenen nativen und neutralen Windowsfenster mit HTML, erweitert um Tags für native Desktop-Controls, wie z.B. Menüs, Toolbars, Panels, TreeViews und anderes mehr.

VPU

Virtual Porcessing Unit (VPU) ist eine Technologie zur Implementation virtueller Porzessoren. Damt ist es möglich, sowohl reale Prozessoren abzubilden, z.B. für Simulationen, als auch reine Softwareprozessoren zu implementieren z.B. als WorkFlow-Engine, zum Parsen von Datenströmen, zur Umformung von Daten und vielem anderen mehr.


Autor:Letzte Änderung:
Stefan Triess13.11.2011
Technologien : MBCS
MessageBus Communication Server