Ich habe die Indy -Bibliothek Multicast-Komponenten (IdIPMCastClient / Server) für diese Art von Sache oft verwendet . Die Apps senden XML einfach miteinander. Schnell und einfach mit minimalen Verbindungsanforderungen.
Ich muss zwei Apps implementieren, die Daten miteinander austauschen. Beide Apps laufen auf separaten PCs, die Teil eines LAN sind.
Wie können wir das in Delphi machen?
Gibt es eine kostenlose Komponente, die den Datenaustausch zwischen Apps auf mehreren PCs erleichtert?
Wenn ich es selbst schreibe, benutze ich (fast) immer Steckdosen, um Daten zwischen Apps auszutauschen.
Es ist leicht, es funktioniert gut auf dem gleichen Computer, über das lokale Netzwerk oder das Internet ohne Änderungen und es ermöglicht Ihnen die Kommunikation zwischen Apps mit verschiedenen Berechtigungen, wie z. B. Dienste (Windows-Nachrichten verursachen hier Probleme).
Das ist vielleicht keine Voraussetzung für Sie, aber ich bin auch ein Fan von plattformunabhängigen Transporten wie TCP / IP.
Es gibt viele freie Wahlmöglichkeiten für Delphi. Hier sind ein paar, die ich kenne. Wenn Sie Bibliotheken blockieren möchten, schauen Sie sich Indy oder Synapse . Wenn Sie nicht blockieren möchten, besuchen Sie ICS .
Bevor Sie sich für eine Technik entscheiden, sollten Sie die Kommunikation nach Durchsatz, Granularität, Latenz und Kritikalität charakterisieren.
Durchsatz - Wie viel Daten pro Zeiteinheit müssen Sie verschieben? Die Bandbreite der möglichen Werte ist so groß, dass die Anwendungen mit der niedrigsten Rate und der höchsten Rate fast nichts gemeinsam haben.
Granularität - wie groß sind die Nachrichten? Wie viele Daten benötigt die empfangende Anwendung, bevor sie die Nachricht verwenden kann?
Latenzzeit - Wenn eine Anwendung eine Nachricht sendet, wie schnell muss die andere Anwendung sie sehen? Wie schnell soll die empfangende Anwendung auf die sendende Anwendung reagieren?
Kritikalität - Wie lange kann eine empfangene Nachricht unbeaufsichtigt bleiben, bevor sie von einer späteren Nachricht überschritten wird? (Dies ist normalerweise nicht wichtig, es sei denn, der Durchsatz ist hoch und der Nachrichtenspeicher ist begrenzt.)
Sobald Sie diese Fragen beantwortet haben, können Sie beginnen, nach der besten Technologie für Ihre spezielle Situation zu fragen.
-Al.
Früher habe ich Mailslots benutzt, wenn ich über ein Netzwerk mit mehr als einem PC gleichzeitig kommunizieren wollte ("broadcast"), obwohl die Mailboxen nicht garantiert sind.
Für 1: 1 sind Named Pipes ein Windows-Weg, um diese Art zu tun, Sie öffnen grundsätzlich einen Kommunikationskanal zwischen 2 PCs und schreiben dann Nachrichten in die Pipe. Nicht gerade einfach, aber sehr zuverlässig und der empfohlene Weg für Dinge wie Windows Services.
MS bietet Named Pipes als alternative Möglichkeit zur Kommunikation mit einem SQL Server (außer TCP / IP).
Aber wie Bruce sagte, ist TCP / IP standard- und plattformunabhängig und sehr zuverlässig.
DCOM war früher eine gute Methode der Interprozesskommunikation. Dies war auch eine der Stärken von Delphis. Heute würde ich stark davor warnen, es zu benutzen.
Abhängig von der Art Ihres Projekts wähle ich entweder
Sehen Sie sich Lösungen an, die Schnittstellen vom Typ "Remote Procedure Call" verwenden. Ich verwende RemObjects SDK für diese Art von Dingen, aber es gibt Open-Source-Versionen von RealThinClient , was genauso gut wäre.
Beide ermöglichen es Ihnen, eine Verbindung zu erstellen, die für den größten Teil Ihres Codes "transparent" ist, und Sie rufen einfach eine Schnittstelle auf, die die Daten über die Leitung sendet und die Ergebnisse zurückbekommt. Sie können dann programmieren, wie Sie es normalerweise tun, und die Details von Sockets usw. vergessen.
Dies ist einer der Fälle, in denen es wirklich keine "beste" Antwort gibt, da nur eine der bereits besprochenen Technologien verwendet werden kann, um genau zwischen zwei Anwendungen zu kommunizieren. Die Wahl der zu verwendenden Methode wird sich auf die kritische Natur Ihrer Kommunikation sowie darauf beziehen, wie viel Daten von einer Workstation zu einer anderen übertragen werden müssen.
Wenn Ihre Kommunikation nicht zeitkritisch oder kritisch ist, kann eine einfache Abfrage einer Datenbank oder Datei in regelmäßigen Abständen ausreichend sein. Wenn Ihre Kommunikation kritisch und zeitkritisch ist, kann es sinnvoll sein, einen TCP / IP-Server in jedem Client zu platzieren. Wenn es nur zeitsensitiv ist, dann macht Mailslots eine gute Wahl, wenn kritische aber nicht zeitsensible dann benannte Pipes.
Ich muss zwei Apps implementieren, die Daten miteinander austauschen. Beide Apps laufen auf separaten PCs, die Teil eines LAN sind.
Wie können wir das in Delphi machen?
Gibt es eine kostenlose Komponente, die den Datenaustausch zwischen Apps auf mehreren PCs erleichtert?
Wenn ich es selbst schreibe, benutze ich (fast) immer Steckdosen, um Daten zwischen Apps auszutauschen.
Es ist leicht, es funktioniert gut auf dem gleichen Computer, über das lokale Netzwerk oder das Internet ohne Änderungen und es ermöglicht Ihnen die Kommunikation zwischen Apps mit verschiedenen Berechtigungen, wie z. B. Dienste (Windows-Nachrichten verursachen hier Probleme).
Das ist vielleicht keine Voraussetzung für Sie, aber ich bin auch ein Fan von plattformunabhängigen Transporten wie TCP / IP.
Es gibt viele freie Wahlmöglichkeiten für Delphi. Hier sind ein paar, die ich kenne. Wenn Sie Bibliotheken blockieren möchten, schauen Sie sich Indy oder Synapse . Wenn Sie nicht blockieren möchten, besuchen Sie ICS .
DCOM war früher eine gute Methode der Interprozesskommunikation. Dies war auch eine der Stärken von Delphis. Heute würde ich stark davor warnen, es zu benutzen.
Abhängig von der Art Ihres Projekts wähle ich entweder
Früher habe ich Mailslots benutzt, wenn ich über ein Netzwerk mit mehr als einem PC gleichzeitig kommunizieren wollte ("broadcast"), obwohl die Mailboxen nicht garantiert sind.
Für 1: 1 sind Named Pipes ein Windows-Weg, um diese Art zu tun, Sie öffnen grundsätzlich einen Kommunikationskanal zwischen 2 PCs und schreiben dann Nachrichten in die Pipe. Nicht gerade einfach, aber sehr zuverlässig und der empfohlene Weg für Dinge wie Windows Services.
MS bietet Named Pipes als alternative Möglichkeit zur Kommunikation mit einem SQL Server (außer TCP / IP).
Aber wie Bruce sagte, ist TCP / IP standard- und plattformunabhängig und sehr zuverlässig.
Bevor Sie sich für eine Technik entscheiden, sollten Sie die Kommunikation nach Durchsatz, Granularität, Latenz und Kritikalität charakterisieren.
Durchsatz - Wie viel Daten pro Zeiteinheit müssen Sie verschieben? Die Bandbreite der möglichen Werte ist so groß, dass die Anwendungen mit der niedrigsten Rate und der höchsten Rate fast nichts gemeinsam haben.
Granularität - wie groß sind die Nachrichten? Wie viele Daten benötigt die empfangende Anwendung, bevor sie die Nachricht verwenden kann?
Latenzzeit - Wenn eine Anwendung eine Nachricht sendet, wie schnell muss die andere Anwendung sie sehen? Wie schnell soll die empfangende Anwendung auf die sendende Anwendung reagieren?
Kritikalität - Wie lange kann eine empfangene Nachricht unbeaufsichtigt bleiben, bevor sie von einer späteren Nachricht überschritten wird? (Dies ist normalerweise nicht wichtig, es sei denn, der Durchsatz ist hoch und der Nachrichtenspeicher ist begrenzt.)
Sobald Sie diese Fragen beantwortet haben, können Sie beginnen, nach der besten Technologie für Ihre spezielle Situation zu fragen.
-Al.
Dies ist einer der Fälle, in denen es wirklich keine "beste" Antwort gibt, da nur eine der bereits besprochenen Technologien verwendet werden kann, um genau zwischen zwei Anwendungen zu kommunizieren. Die Wahl der zu verwendenden Methode wird sich auf die kritische Natur Ihrer Kommunikation sowie darauf beziehen, wie viel Daten von einer Workstation zu einer anderen übertragen werden müssen.
Wenn Ihre Kommunikation nicht zeitkritisch oder kritisch ist, kann eine einfache Abfrage einer Datenbank oder Datei in regelmäßigen Abständen ausreichend sein. Wenn Ihre Kommunikation kritisch und zeitkritisch ist, kann es sinnvoll sein, einen TCP / IP-Server in jedem Client zu platzieren. Wenn es nur zeitsensitiv ist, dann macht Mailslots eine gute Wahl, wenn kritische aber nicht zeitsensible dann benannte Pipes.
Sehen Sie sich Lösungen an, die Schnittstellen vom Typ "Remote Procedure Call" verwenden. Ich verwende RemObjects SDK für diese Art von Dingen, aber es gibt Open-Source-Versionen von RealThinClient , was genauso gut wäre.
Beide ermöglichen es Ihnen, eine Verbindung zu erstellen, die für den größten Teil Ihres Codes "transparent" ist, und Sie rufen einfach eine Schnittstelle auf, die die Daten über die Leitung sendet und die Ergebnisse zurückbekommt. Sie können dann programmieren, wie Sie es normalerweise tun, und die Details von Sockets usw. vergessen.
Eine Möglichkeit könnte sein, Objekte über das Netzwerk zu "teilen".
Es ist möglich mit einem Client-Server ORM wie unserem kleinen mORMot .
Diese Open-Source-Libraries funktionieren von Delphi 6 bis XE2 und verwenden JSON für die Übertragung. Es gibt einige Sicherheitsfunktionen (einschließlich eines RESTful-Authentifizierungsmechanismus ) ), und kann jede Datenbank benutzen - oder gar keine Datenbank.
Siehe insbesondere die ersten vier bereitgestellten Beispiele und die zugehörige Dokumentation.
Ich habe die Indy -Bibliothek Multicast-Komponenten (IdIPMCastClient / Server) für diese Art von Sache oft verwendet . Die Apps senden XML einfach miteinander. Schnell und einfach mit minimalen Verbindungsanforderungen.
Wahrscheinlich ist der einfachste Weg, eine Datei (oder möglicherweise eine Datei pro Richtung) zu lesen und zu schreiben. Es hat auch den Vorteil, dass es einfach zu simulieren und zu verfolgen ist. Es ist jedoch nicht die schnellste Option (und es klingt definitiv lahm ;-)).
Für die Integration von Delphi-Anwendungen könnte eine nachrichtenorientierte Middleware eine Option sein. Nachrichtenbroker bieten garantierte Zustellung, Load Balancing, verschiedene Kommunikationsmodelle und arbeiten plattformübergreifend und sprachenübergreifend. Zu den Open-Source-Nachrichtenbrokern gehören:
(Disclaimer - Ich bin der Autor von Delphi / Free Pascal Client-Bibliotheken für diese Server)
Wahrscheinlich ist der einfachste Weg, eine Datei (oder möglicherweise eine Datei pro Richtung) zu lesen und zu schreiben. Es hat auch den Vorteil, dass es einfach zu simulieren und zu verfolgen ist. Es ist jedoch nicht die schnellste Option (und es klingt definitiv lahm ;-)).
Eine Möglichkeit könnte sein, Objekte über das Netzwerk zu "teilen".
Es ist möglich mit einem Client-Server ORM wie unserem kleinen mORMot .
Diese Open-Source-Libraries funktionieren von Delphi 6 bis XE2 und verwenden JSON für die Übertragung. Es gibt einige Sicherheitsfunktionen (einschließlich eines RESTful-Authentifizierungsmechanismus ) ), und kann jede Datenbank benutzen - oder gar keine Datenbank.
Siehe insbesondere die ersten vier bereitgestellten Beispiele und die zugehörige Dokumentation.
Für die Integration von Delphi-Anwendungen könnte eine nachrichtenorientierte Middleware eine Option sein. Nachrichtenbroker bieten garantierte Zustellung, Load Balancing, verschiedene Kommunikationsmodelle und arbeiten plattformübergreifend und sprachenübergreifend. Zu den Open-Source-Nachrichtenbrokern gehören:
(Disclaimer - Ich bin der Autor von Delphi / Free Pascal Client-Bibliotheken für diese Server)