Remote Procedure Calls
-
hi,
ich suche gerade nach möglichkeiten die kommunikation übers netz zwischen einer windows-anwendung und einem embedded device zu verbessern.
von windows - sicht aus stellt das gerät einen normalen server dar, der über TCP/IP sockets angesprochen werden kann, aus sicht des geräts erfolgt die kommunikation über proprietäre kommunikationskanäle (wie genau sei jetzt mal egal, jedenfalls keine sockets, die mit einer x-beliebigen netzwerk-lib zusammenarbeiten).
bis jetzt lief die kommunikation über ein einfaches textbasiertes protokoll. das musste auf windows-seite halt immer zusammengebastelt werden, auf geräte-seite wieder geparst und evtl wieder eine antwort zurückgeschickt werden etc.
das ist natürlich sehr hässlich, wenn man die funktionalität erweitern will. jedesmal das protokoll erweitern, wieder ettliche daten parsen, an x funktionen verteilen etc...folgendes stell ich mir vor: aus dem interface der software auf dem gerät (also den headern etc.) stubs erzeugen, mit denen ich aus der anwendung direkt auf die funktionen zugreifen kann, ohne mich um die codierung / decodierung der daten kümmern zu müssen.
ich hatte schonmal in RPCs unter linux reingeschaut. so ganz prinzipiell geht das schon in die richtige richtung. allerdings hab ich da wohl das problem, dass die netzwerk-kommunikation auch auf dem gerät transparent sein muss - es kann natürlich nicht alles dafür umgeschrieben werden, sondern entsprechende funktionalität sollte aufgesetzt werden können. von dem problem, dass ich da ja keine normale TCP/IP anwedung schreiben kann, ganz zu schweigen.
aber es gibt ja noch ein paar mehr techniken in der richtung (IDL, XML-RPC etc.).
leider hab ich da auch erstmal den überblick verloren, vielleicht hat da jemand mehr erfahrung?
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
es ging hier schon um die umsetzung in C++

-
Also wenn ich dich richtig verstanden habe, willst du ja einfach das Ansprechen des eingebetteten Gerätes abstrahieren, richtig? Eine Windows-Anwendung, die mit dem Gerät kommuniziert, soll möglichst wenig Aufwand bereiten, bestenfalls einfach eine entsprechende Methode aufrufen, die dann mit dem entsprechenden Protokoll mit dem Ding kommuniziert (und evtl die richtigen Werte wieder zurückliefert). Hab ich das soweit richtig verstanden?
Falls ja: Wieso willst du die Kommunikation dann über RPCs erledigen? Ich persönlich kenne nur die XML-RPCs, die natürlich eine Menge Overhead mitbringen, was auf einem embedded-device nicht unbedingt immer erwünscht ist
Ich an deiner Stelle würde ein eigenes, einfaches, binäres Protokoll zusammenwürfeln, was meiner Meinung nach auch recht schnell gehen sollte und Ressourcen-schonend ist. Du musst es natürlich auf Client- und Serverseite implementieren, die serverseitige Umsetzung könntest du dann als Lib entwickeln, so dass du auf der Server-Seite wirklich nur einfache Funktionen aufrufst, wie "Verbinden", "Prozeduraufruf" und "Trennen" oder so.
-
maximAL schrieb:
es ging hier schon um die umsetzung in C++

Standard C++ kennt keine sockets usw.
Kannst du die Software von dem Embeddendevice ändern?
-
Badestrand schrieb:
Also wenn ich dich richtig verstanden habe, willst du ja einfach das Ansprechen des eingebetteten Gerätes abstrahieren, richtig? Eine Windows-Anwendung, die mit dem Gerät kommuniziert, soll möglichst wenig Aufwand bereiten, bestenfalls einfach eine entsprechende Methode aufrufen, die dann mit dem entsprechenden Protokoll mit dem Ding kommuniziert (und evtl die richtigen Werte wieder zurückliefert). Hab ich das soweit richtig verstanden?
nunja, es geht vorallem darum mit möglichst wenig programmieraufwand auszukommen.
Badestrand schrieb:
Falls ja: Wieso willst du die Kommunikation dann über RPCs erledigen? Ich persönlich kenne nur die XML-RPCs, die natürlich eine Menge Overhead mitbringen, was auf einem embedded-device nicht unbedingt immer erwünscht ist
Ich an deiner Stelle würde ein eigenes, einfaches, binäres Protokoll zusammenwürfeln, was meiner Meinung nach auch recht schnell gehen sollte und Ressourcen-schonend ist. Du musst es natürlich auf Client- und Serverseite implementieren, die serverseitige Umsetzung könntest du dann als Lib entwickeln, so dass du auf der Server-Seite wirklich nur einfache Funktionen aufrufst, wie "Verbinden", "Prozeduraufruf" und "Trennen" oder so.tja, genau das ist, was ich bisher mache. aber das problem ist halt, dass ich alles immer von hand implementieren muss. da gehts nicht um ein halbes dutzen funktionen, sondern darum das gerät zu test - u. debug zwecken möglichst weitgehend zu steuern (performance ist da auch eher nebensächlich). obwohl das protokoll jetzt noch nichtmal sooo umfangreich ist, frisst das ganze auf dem gerät schon bald 2000 loc, weil sich da eine riesen funktionshierarchie auftut um die empfangenen commands stück für stück zu parsen, inkl. aller sicherheitschecks.
simonandgarfunkel schrieb:
Kannst du die Software von dem Embeddendevice ändern?
naja, die netzwerk-funktionalität sollte weitgehend aufgesetzt werden können, an den eigentlichen bibliotheken sollte ich lieber nichts gravierendes ändern müssen.
-
nimm das: http://en.wikipedia.org/wiki/Type-length-value
einfach, ressourcensparend, leicht erweiterbar,...

ööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööööö