Signal/Slot Mechanismus übers Netzwerk nutzen
Verfasst: 8. November 2004 15:40
Hallo,
ich schreibe gerade an meiner Diplomarbeit und habe deswegen ein etwas kniffliges Problem.
Mein Ziel ist es zwei Applikationen (basierend auf Qt, geschrieben in C++) zu bauen die sich gegenseitig über Netzwerk (LAN) signals zuschicken können und damit in der jeweils anderen Applikation den verbundenen slot auslösen.
Die Firma die mir das Thema gestellt hat, hat bereits eine Lösung die auf Sockets basiert, welche aber schwer zu erweitern ist, da bei jedem neuen Signal viel Code per Hand hinzugefügt werden muß. Ihnen schwebt eine Lösung vor, bei der sie mehr oder weniger nur das Interface / die Signatur des Signals angeben müssen und der restliche Netzwerkrelevante Code automatisch generiert wird. Dieses Vorgehen ist vergleichbar mit dem eines IDL Compilers einer Middleware.
Deswegen sollte ich zunächst nach Middleware Lösungen suchen, die direkt mit Signal / Slot umgehen können. Mein erster Gedanke war CORBA, aber mittlerweile weiß ich das CORBA nicht direkt mit Signal/Slot arbeiten kann.
Mein nächster Ansatz war das Desktop COmmunication Protocol (DCOP) welches von KDE entwickelt wurde. KDE hat früher CORBA zur Interprozess kommunikation eingesetzt und dieses später durch DCOP ersetzt.
Mit DCOP kann man jede Applikation zu einer DCOP-Client-Applikation machen, welche sich am DCOP Server anmelden kann und dann mit anderen DCOP-Client-Applikationen kommunizieren kann. Dies funktioniert auch mit der Signal/Slot Semantik. Es sind zwar nicht die Original Qt Signal/Slots aber sie sind sehr stark daran angelehnt. Ausserdem verfügt DCOP über einen IDL-Compiler, der alles weitgehend automatisiert. Leider ist es mir nicht gelungen eine DCOP-Client-Applikation an einem DCOP-Server anzumelden der auf einem anderen (über LAN verbundenen) Rechner läuft.
Zwar wird DCOP sehr oft als RPC/IPC Protocol bezeichnet und kann angeblich auch TCP/IP Sockets nutzen, aber die Kommunikation über Netzwerk scheint nicht vorgesehen zu sein.
Falls jemand weiß wie man mit DCOP übers Netzwerk kommuniziert wäre ich dankbar wenn er verrät wie (selbst wenn es nur mit irgend einer Form von Bridge funktioniert).
Im Zweifel würde es mir auch helfen, wenn mir jemand glaubhaft versichern kann, das Netzwerkkommunikation über DCOP nicht funktioniert, damit ich den Ansatz endgültig verwerfen kann.
Kennt jemand zufällig irgend eine Middleware (oder ähnliches), welche mit Signal/Slot direkt umgehen kann?
Kann sich jemand irgend eine andere Art von Lösung für mein Problem vorstellen?
Vielen Dank im Voraus!
Gruß,
Alex
ich schreibe gerade an meiner Diplomarbeit und habe deswegen ein etwas kniffliges Problem.
Mein Ziel ist es zwei Applikationen (basierend auf Qt, geschrieben in C++) zu bauen die sich gegenseitig über Netzwerk (LAN) signals zuschicken können und damit in der jeweils anderen Applikation den verbundenen slot auslösen.
Die Firma die mir das Thema gestellt hat, hat bereits eine Lösung die auf Sockets basiert, welche aber schwer zu erweitern ist, da bei jedem neuen Signal viel Code per Hand hinzugefügt werden muß. Ihnen schwebt eine Lösung vor, bei der sie mehr oder weniger nur das Interface / die Signatur des Signals angeben müssen und der restliche Netzwerkrelevante Code automatisch generiert wird. Dieses Vorgehen ist vergleichbar mit dem eines IDL Compilers einer Middleware.
Deswegen sollte ich zunächst nach Middleware Lösungen suchen, die direkt mit Signal / Slot umgehen können. Mein erster Gedanke war CORBA, aber mittlerweile weiß ich das CORBA nicht direkt mit Signal/Slot arbeiten kann.
Mein nächster Ansatz war das Desktop COmmunication Protocol (DCOP) welches von KDE entwickelt wurde. KDE hat früher CORBA zur Interprozess kommunikation eingesetzt und dieses später durch DCOP ersetzt.
Mit DCOP kann man jede Applikation zu einer DCOP-Client-Applikation machen, welche sich am DCOP Server anmelden kann und dann mit anderen DCOP-Client-Applikationen kommunizieren kann. Dies funktioniert auch mit der Signal/Slot Semantik. Es sind zwar nicht die Original Qt Signal/Slots aber sie sind sehr stark daran angelehnt. Ausserdem verfügt DCOP über einen IDL-Compiler, der alles weitgehend automatisiert. Leider ist es mir nicht gelungen eine DCOP-Client-Applikation an einem DCOP-Server anzumelden der auf einem anderen (über LAN verbundenen) Rechner läuft.
Zwar wird DCOP sehr oft als RPC/IPC Protocol bezeichnet und kann angeblich auch TCP/IP Sockets nutzen, aber die Kommunikation über Netzwerk scheint nicht vorgesehen zu sein.
Falls jemand weiß wie man mit DCOP übers Netzwerk kommuniziert wäre ich dankbar wenn er verrät wie (selbst wenn es nur mit irgend einer Form von Bridge funktioniert).
Im Zweifel würde es mir auch helfen, wenn mir jemand glaubhaft versichern kann, das Netzwerkkommunikation über DCOP nicht funktioniert, damit ich den Ansatz endgültig verwerfen kann.
Kennt jemand zufällig irgend eine Middleware (oder ähnliches), welche mit Signal/Slot direkt umgehen kann?
Kann sich jemand irgend eine andere Art von Lösung für mein Problem vorstellen?
Vielen Dank im Voraus!
Gruß,
Alex