Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Viele permanente IP-Verbindungen parallel handeln (https://www.delphipraxis.net/97854-viele-permanente-ip-verbindungen-parallel-handeln.html)

UweR 17. Aug 2007 11:09


Viele permanente IP-Verbindungen parallel handeln
 
Hallo Leute,

ich muß mit einem TCP-server permanente Verbindungen parallel handeln. Bisher bin ich einfach hingegangen hab nen Indy-Server genommen, mir nen Thread abspalten lassen, da eine Klasse drangepappt die mir die Daten einliest und diese dann schön threadsafe an meine Applikation übergeben die damit irgendwas anstellt wie in ne Datenbank schreiben etc.. Bis jetzt war die Anzahl der Verbindungen ein paar Hundert und es hat damit auch funktioniert. Nur jetzt sollen aus hunderten Tausende werden und das tausende Threads da in der Gegend rumschwirren und fragen ob denn jetzt wal was für sie zu tuen ist find ich nicht so prickelnd, zumal die Verbindung so oder so die meiste Zeit ruht. Sie muß nur gehalten werden weil am anderen Ende GPRS-Teile sitzen denen so ab und zu mal was geschickt werden muß, die aber wegen GPRS halt nicht direkt erreichbar sind.

Fällt irgendjemand dazu ne Lösung ein? Z.B. einfach nur an den Verbindungen lauschen und erst dann nen Thread abspalten wenn wirklich Daten kommen?

oki 17. Aug 2007 12:50

Re: Viele permanente IP-Verbindungen parallel handeln
 
Hi, der server etabliert doch seperate Socket-Objekte für jede Verbindung. Bei tausend Verbindungen bestehen do sowieso schon 1000 SocketInstanzen. Leg doch die Nachrichten in eine warteschlange und lass sie abarbeiten. wenn dein Rechner damit überfordert wird, dann ist an der Stelle eh alles zu spät.
Ich sehe das Handling weniger als das Problem. Das tritt ab einer bestimmten Menge von Verbindungen dann sowieso auf.

Warum und aus welchem Grund hast denn Sorgen?

Gruß oki

shmia 17. Aug 2007 13:31

Re: Viele permanente IP-Verbindungen parallel handeln
 
Wie wäre es mit einem Thread-Pool?
Prinzip: ein Pool von Threads (z.B. 20 Stück) versucht ständig, eine Job-Liste abzuarbeiten.
Bei leerer Job-Liste legen sich die Threads schlafen, bis sie durch neue Jobs aufgeweckt werden.
Angenommen, du hast 80 Anfragen "gleichzeitig", dann werden 80 Jobs in die Liste eingetragen.
Im Durchschnitt verarbeitet jeder Thread dann 4 Jobs, bis die Liste leer ist.

http://www.delphipraxis.net/internal...t.php?t=111982

UweR 17. Aug 2007 13:52

Re: Viele permanente IP-Verbindungen parallel handeln
 
@Oki:
Das er mir die Socketobjekte erstellt ist schon klar, aber der Indy-server erstellt mir aber noch für jeden Socket einen eigenen Thread der natürlich auch schon mal seine Rechenzeit bekommt. Wenn ich alle Sockets über einen Thread abfragen würde gäbe es zwar wahrscheinlich schon mal Wartezeiten pro Socket, aber die kann ich verkraften.

@shmia:
Die Idee mit dem Thread-Pool war mir auch schon gekommen.

Die Frage ist nur wie kann ich meinen Indy-Server davon abhalten für jede Verbindung einen eigenen Thread abzuspalten bzw. gibt es ne andere Komponente die sich besser eignet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:26 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