Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#21

AW: Modularer (evtl. verteilter) Programmaufbau - Welche Art von IPC ist die richtige

  Alt 7. Mai 2013, 13:39
Zusammenfassend scheinen fertig zu kaufende Lösungen wie eben RemObjects oder RealThinClient mir (in meinem konkreten Fall) die Arbeit abzunehmen, wie ich jetzt meine Präsentationsschicht mit der Anwendungsschicht verknüpfe?
Die fertig zu kaufenden Lösungen sind aber nicht für alle Architekturen optimal geeignet. RO und RTC sind eher Serveranwendugen, an die sich dann Clients (auch sehr viele Clients) wenden, wenn sie ein Anliegen haben - Request / Response und RPC Kommunikation.

Wenn aber alle Plugins als Clients implementiert werden, die sich an einen zentralen Server andocken sollen, wird dem Serverprozess die gesamte Koordination der Anfragen und das Weitergeben an andere Plugins übertragen. Dazu müssten auch Callbacks implementiert werden, so dass der Server aufgrund der Anfrage eines Plugins aktiv einem anderen Plugin Nachrichten senden kann.

Ich stelle mir als Lösung eher einen sehr schlanken Message Bus vor - eine einheitliche Infrastruktur die allen Plugins gleichberechtigt zur Verfügung steht. Dazu würde ich ein sehr kompaktes Protokoll wie MQTT einsetzen, das gerade für kleine Nachrichten und langsame Netze (schwache Hardware wie Arduino) ausgelegt ist. (http://mqtt.org/ und http://mqtt.org/faq)

Jedes Plugin benötigt dann nur eine sehr kompakte und komplett im Prozess integrierte Clientbibliothek, unabhängig von DLLs oder Services wie DCOM ist. Nur TCP wird benötigt, zum Beispiel über Synapse das auch sehr schlank ist.

Anwendungen, die die Daten der Plugins visualisieren wollen, lauschen dann entweder auf dem Message Bus und verarbeiten Daten die momentan darüber gesendet werden, oder senden Befehle über den Message Bus an ein Plugin, das daraufhin zum Beispiel Statusdaten an den Sender zurückschickt.

Auch eine Weboberfläche liesse sich damit problemlos anbinden, selbst wenn sie in einer anderen Sprache geschrieben ist, wenn für das Protokoll (z.B. MQTT) bereits entsprechende Clients existieren.

Der wesentliche Unterschied ist, dass es keine Server- und Clientprozesse gibt sondern jedes Plugin aktiv senden und passiv empfangen kann. Das kann man auch nutzen um eine Benutzeroberfläche fernzusteuern, zum Beispiel abhängig vom Status eines Plugins einen Menüpunkt zu aktivieren - das Plugin sendet eine Nachricht wie "Ich bin jetzt aktiviert!" über den Bus. Das GUI Programm lauscht auf entsprechende Statusnachrichten und schaltet die Menupunkte ein.
Michael Justin
  Mit Zitat antworten Zitat