2017-01-18 3 views
0

in Ordnung i, diesen Ansatz zu verstehen versuche können, sagen, dass ich 2 ServerTidtcpserver auf Multiports hören?

ausgeführt haben

Server A auf IP-36663 1.1.1.1 und Port ist Server B ist auf IP 2.2.2.2 und Port 54223

i Ich möchte diesen Ansatz verstehen

Kann ich Clients auf Server A in die Lage versetzen, mit Clients auf Server B zu kommunizieren? als Beispiel ein Client verbindet auf Server A und möchte einige Daten an einen Client senden, der Verbindung zu Server B ist dies kann mit Indy TCP Server getan werden?

Wenn die Antwort ja lautet, ist ein Beispiel hilfreich, um diesen Ansatz zu verstehen.

ich habe 2 Server auf verschiedenen Maschinen

1 Maschine haben einige langsame Netzwerkproblem und das andere haben gutes Netzwerk.

die Logik hier ist, wenn der Kunde zu serverA, die mehr als 20 Sekunden verbinden dauert, während diese 20 Sekunden versuchen, auf anderen Server-IP zu verbinden und mit dem Kunden kommunizieren kann, die bereits coonnected auf serverA

Antwort

1

TIdTCPServer verfügt über eine Bindings-Eigenschaft, bei der es sich um eine Sammlung von IP/Port-Paaren handelt, die der Server überwacht. Sie können ein einzelnes TIdTCPServer Objekt verwenden, das auf mehrere IP/Port-Paare wartet, oder Sie können mehrere TIdTCPServer Objekte verwenden, die auf unterschiedlichen Paaren auf demselben Computer abhören.

In beiden Fällen werden die verbundenen Clients in der Eigenschaft TIdTCPServer.Contexts gespeichert.

Wenn ein Client Daten an einem anderen Client senden, unabhängig davon, welche Server-IP/Port ihn angeschlossen ist, alles, was Sie tun müssen, ist durch die Contexts Liste des entsprechenden TIdTCPServer Objekts iterieren, bis Sie die TIdContext Aufgabe finden Zielclient, und dann haben Sie Zugriff auf seine Connection.IOHandler Eigenschaft.


Auf der anderen Seite, wenn Sie auf verschiedenen Maschinen laufen getrennte TIdTCPServer Objekte haben können die Kunden mit den Kunden auf einem anderen Server nicht direkt miteinander kommunizieren. Sie müssen eine Verbindung zwischen den beiden Servern herstellen und dann können Sie alle Client-zu-Client-Daten nach Bedarf über diese Verbindung übertragen.

+0

also ich nur multi ip und port zur verbindung hinzufügen, wird dieser ansatz benötigt, um einige fehlgeschlagen verbindungen als beispiel, wenn server A braucht lange zeit zum verbinden dann verbinden mit server B und immer in der lage zu kommunizieren mit Server A –

+0

öffnen Die Ports beeinflussen nicht die Zeit, die für die Verbindung zu ihnen benötigt wird. Wenn Sie zwei Ports * auf demselben Servercomputer * öffnen, kann ein Client eine Verbindung zu einem der Ports herstellen, und es sollte die gleiche Zeit in beide Richtungen dauern. Nun, wenn Sie * zwei Server-Maschinen * haben und wollen, dass sie miteinander reden, ist das ein ganz anderes Problem. Ich schlage vor, dass Sie Ihre Frage bearbeiten, um Ihre tatsächliche Situation zu klären. –

+0

nein ich meine auf verschiedenen Maschinenservern. –