Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TCP Lastenverteilen (https://www.delphipraxis.net/175062-tcp-lastenverteilen.html)

Gruber_Hans_12345 28. Mai 2013 15:18

TCP Lastenverteilen
 
Hallo ich schreibe gerade eine art webservice, also horcht auf einen Port und rechnet dann und gibt dann Daten zurück, die Daten können paar Bytes sein, aber auch einige Megabytes.

Da der webservice sehr sehr stabil laufen muss habe ich nun folgende idee

Jeder webservice kann nur eine Client anfrage annehmen, verarbeitet die, schickt daten zurück und erst dann kann eine weitere Anfrage verarbeitet werden.
Das Problem ist, das es einfach sein kann, das durch fehlerhaften code im auszuführende programm, schlimmes passiert ;)

Meine Idee ist nun eine art Lastenverteilung zu machen, also ein Hauptprogramm, das eine Anfrage per TCP entgegen nimmt, dann sich eines der 20 offenen EXE sucht, und dann die Anfrage weiterleitet (es sollte aber dann so sein, das das Main Programm gar nichts mehr mitbekommt von dem ganzen, also der ganze TCP Verkehr sollte dann NICHT mehr über das Main Programm laufen)
Wenn eine EXE fertig ist, dann meldet es sich wieder beim Main Programm.
Wenn keine EXE verfügbar ist, dann kann ein neuer webservice geöffnet werden, oder es muss gewartet werden - je nach dem.

Meine große Frage ist, hat sowas schon mal wer gemacht?
Vorallem der Part, ob man eine TCP Verbindung an ein anderes Programm weitergeben kann ist hier offen, ich möchte nicht die Daten wieder zurückschleusen müssen, wenn es sich verhindern lässt.

Oder gibts gute andere Ideen?

Valle 28. Mai 2013 15:24

AW: TCP Lastenverteilen
 
Das scheint genau das Prinzip der "richtigen" Webserver zu sein. Klingt eigentlich genau wie das Apache Prefox Modell. Apache "forkt" (erstellt einen neuen Prozess) mehrere Prozesse und hält diese alle bereit. Kommt eine neue Anfrage rein, wird einer dieser Prozesse zum Bearbeiten des Requests verwendet. Der Apache Webserver selbst weiß dann ja immer, wer gerade beschäftigt ist.

Ist also total Standard. Habe ich quasi schon tausende Male gemacht. Oder habe ich dich falsch verstanden?

Liebe Grüße,
Valentin

Gruber_Hans_12345 28. Mai 2013 15:31

AW: TCP Lastenverteilen
 
Ja aber die frage ist kann ich eine TCP Verbindung von einem Programm an ein anderes weitergeben?
Also nicht indem mein Main Programm eine zusätzliche verbindung aufmacht und nun alles darübergeschcikt wird
sondern das der Client und der webservice dann direkt kommunizieren können?

WM_CLOSE 28. Mai 2013 15:46

AW: TCP Lastenverteilen
 
Du kannst den TCP-Traffic in Named-Pipes routen. Ich glaube nichtr, dass es da was fertiges gibt.

franktron 28. Mai 2013 15:53

AW: TCP Lastenverteilen
 
Zitat:

Zitat von Gruber_Hans_12345 (Beitrag 1216743)
Ja aber die frage ist kann ich eine TCP Verbindung von einem Programm an ein anderes weitergeben?
Also nicht indem mein Main Programm eine zusätzliche verbindung aufmacht und nun alles darübergeschcikt wird
sondern das der Client und der webservice dann direkt kommunizieren können?

Also bei mir sind das alles Threads.

Ich machen für jede Verbindung einen neuen Thread auf, und der Verarbeitet die Daten und Kommuniziert auch eigenständig mit dem Client

Valle 28. Mai 2013 15:59

AW: TCP Lastenverteilen
 
Achso.

Man leitet TCP eigentlich nicht weiter. Man entwickelt einen Proxy. Dieser stellt eine neue Anfrage, öffnet also eine neue Verbindung. Für diesen Zweck wurde dann auch der HTTP-Header X-Forwarded-For eingeführt, damit die Absenderadresse über den Proxy nicht verloren geht.

(Wenn du Threads statt Prozessen benutzt, kannst du die offene Verbindung denke ich weiterreichen. Aber so inter-process wird das denke ich nicht funktionieren.)

Liebe Grüße,
Valentin


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:23 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz