Was ist die bevorzugte Methode, um Daten zwischen zwei Anwendungen auf demselben System zu übertragen?

8

Ich habe eine Anwendung (A), die eine andere Anwendung starten muss (B). Ich muss Daten zwischen den Anwendungen übergeben. Ich kann mir zwei Ansätze vorstellen. Die erste besteht darin, einen Socket zu öffnen. Die zweite besteht darin, Daten über eine DLL zu teilen.

Der Öffnungsansatz ist geradlinig.

Die DLL-Ansatz Ich habe ein paar Fragen? Ich kann Plug-in-DLLs in B laden. Ich möchte eine DLL erstellen, die A verwenden kann, um Daten an B zu übergeben. Wird beim Laden von DLLs nur eine Instanz der DLL geladen? Wenn ja, bedeutet dies, dass Daten zwischen Anwendungen geteilt werden können, die die DLL laden?

Was ist die bessere Wahl?

Gibt es andere Möglichkeiten, dies zu tun?

    
zooropa 12.08.2010, 17:08
quelle

6 Antworten

13

Sie können Daten nicht effektiv über eine DLL freigeben. Andere Möglichkeiten:

  • Festplattendateien
  • pipes
  • shared memory
  • Nachrichten
  • RPC
  • CORBA
  • COM
  • usw.
anon 12.08.2010, 17:10
quelle
5

Die einfachste Methode (angenommen Windows, da Sie eine DLL erwähnen) ist wahrscheinlich, CreateProcess zu verwenden und eine Pipe zum Kindprozess zu öffnen, wie hier in vereinfachter Form beschrieben: Ссылка

Named Pipes können eine Alternative sein, besonders wenn Sie nicht die Kontrolle über die Lebensdauer aller Prozesse haben. Ссылка

Für einfache Fälle können Mailslots eine ausreichende Alternative sein.

Ссылка

Hier finden Sie eine längere Liste verschiedener Interprocess-Kommunikationstechniken für Windows. Ссылка

Wenn etwas lokal passiert, scheint die Verwendung von Sockets etwas Overkill zu sein. Außerdem müssen Sie Ihren eigenen Sicherheitsmechanismus implementieren, um Spoofing-Angriffe zu verhindern, anstatt vom integrierten Sicherheitsmechanismus der meisten anderen IPC-Methoden abhängig zu sein.

    
JasonTrue 12.08.2010 17:47
quelle
1

Es ist immer gut, alternative mögliche Lösungen zu erforschen, aber ich persönlich glaube, dass die Verwendung von Sockets als Transportschicht für Daten zwischen Anwendungen nicht nur zukunftssicher, sondern auch skalierbar ist. Wenn Sie Sockets verwenden, müssen Sie nicht mehr viel Betriebssystem-spezifischen Code schreiben, der Sie davon abhalten könnte, Ihre Anwendung zukünftig auf Nicht-Windows-Betriebssysteme zu portieren.

Ich würde Sockets vorschlagen.

    
carribus 12.08.2010 19:10
quelle
0

Sie können einen gemeinsamen Cache verwenden (z. B. einen Windows-Dienst oder einen versteckten Prozess), der zuhören kann und Daten an alle Teilnehmer zurückgibt. Dies unter Verwendung eines Beobachter-Muster-Ansatzes.

    
Juan Zamora 12.08.2010 17:29
quelle
0

Ich stimme etwas mit Juan Zamora M überein, außer dass der Dienst, der die Daten bereitstellt, eine API haben sollte das kann bei Bedarf angefordert werden, nicht gedrückt, wenn über Listener geändert.

    
Brian K Blain 12.08.2010 19:37
quelle
0

Das könnte helfen. Dateien und Speicher freigeben

    
gumby 02.09.2011 19:48
quelle

Tags und Links