Daten zwischen zwei Anwendungen über PC im LAN austauschen

7

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?

    
Yogi Yang 007 10.08.2009, 12:51
quelle

10 Antworten

11

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 .

    
Bruce McGee 10.08.2009, 13:22
quelle
4

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.

    
A. I. Breveleri 10.08.2009 19:03
quelle
3

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.

    
J__ 10.08.2009 15:32
quelle
3

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

  • mit einem SQL-Server
  • Socket-Kommunikation
Martin Liesén 10.08.2009 21:14
quelle
1

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.

    
mj2008 10.08.2009 14:48
quelle
1

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.

    
skamradt 10.08.2009 18:09
quelle
1
___ qstntxt ___

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?

    
___ answer1254841 ___

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 .

    
___ answer1257250 ___

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

  • mit einem SQL-Server
  • Socket-Kommunikation
___ answer1255588 ___

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.

    
___ qstnhdr ___ Daten zwischen zwei Anwendungen über PC im LAN austauschen ___ answer1256624 ___

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.

    
___ answer1256357 ___

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.

    
___ answer1255344 ___

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.

    
___ tag123database ___ Eine Datenbank ist eine organisierte Sammlung von Daten. Es ist die Sammlung von Schemas, Tabellen, Abfragen, Berichten, Ansichten und anderen Objekten. Die Daten sind typischerweise so organisiert, dass sie Aspekte der Realität so modellieren, dass sie Prozesse unterstützen, die Informationen benötigen. Verwenden Sie dieses Tag, wenn Sie Fragen zum Entwerfen einer Datenbank haben. Wenn es sich um ein bestimmtes Datenbankverwaltungssystem (z. B. MySQL) handelt, verwenden Sie stattdessen dieses Tag. ___ tag123delphi ___ Delphi ist eine Sprache für die schnelle Entwicklung von nativen Windows-, macOS-, Linux-, iOS- und Android-Anwendungen mithilfe von Object Pascal. Der Name bezieht sich sowohl auf die Delphi-Sprache als auch auf deren Bibliotheken, Compiler und IDE, mit denen Delphi-Projekte bearbeitet und debuggt werden können. ___ answer8090622 ___

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.

    
___ antwort1257690 ___

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.

    
___ answer1254941 ___

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 ;-)).

    
___ tag123sockets ___ Ein Endpunkt eines bidirektionalen Interprozess-Kommunikationsflusses. Dies bezieht sich oft auf einen Prozessablauf über eine Netzwerkverbindung, ist jedoch keineswegs darauf beschränkt. Nicht zu verwechseln mit Websocket (einem Protokoll) oder anderen Abstraktionen (z. B. socket.io). ___ answer1258988 ___

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)

    
___ tag123lan ___ LAN oder Local Area Network ist ein Computernetzwerk, das Computer und Geräte in einem begrenzten geographischen Bereich wie zu Hause, in der Schule, im Computerlabor oder im Büro verbindet. Im Gegensatz zu Weitverkehrsnetzen (Wide Area Networks, WANs) umfassen die charakteristischen Merkmale von LANs ihre normalerweise höheren Datenübertragungsraten, kleinere geographische Gebiete und das Fehlen eines Bedarfs an gemieteten Telekommunikationsleitungen. ___
Gerard 10.08.2009 22:58
quelle
0

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 ;-)).

    
dummzeuch 10.08.2009 13:37
quelle
0

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.

    
Arnaud Bouchez 11.11.2011 06:55
quelle
0

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)

    
mjn 11.08.2009 08:04
quelle

Tags und Links