AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TCP Lastenverteilen
Thema durchsuchen
Ansicht
Themen-Optionen

TCP Lastenverteilen

Ein Thema von Gruber_Hans_12345 · begonnen am 28. Mai 2013 · letzter Beitrag vom 28. Mai 2013
Antwort Antwort
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#1

TCP Lastenverteilen

  Alt 28. Mai 2013, 16:18
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?
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#2

AW: TCP Lastenverteilen

  Alt 28. Mai 2013, 16:24
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
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Gruber_Hans_12345

Registriert seit: 14. Aug 2004
1.439 Beiträge
 
Delphi 2007 Professional
 
#3

AW: TCP Lastenverteilen

  Alt 28. Mai 2013, 16:31
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?
Gruss Hans

2B or not 2B, that is FF
  Mit Zitat antworten Zitat
WM_CLOSE

Registriert seit: 12. Mai 2010
Ort: königsbronn
398 Beiträge
 
RAD-Studio 2009 Pro
 
#4

AW: TCP Lastenverteilen

  Alt 28. Mai 2013, 16:46
Du kannst den TCP-Traffic in Named-Pipes routen. Ich glaube nichtr, dass es da was fertiges gibt.
Delphi programming
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: TCP Lastenverteilen

  Alt 28. Mai 2013, 16:53
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
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#6

AW: TCP Lastenverteilen

  Alt 28. Mai 2013, 16:59
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
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:09 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