![]() |
Tcp-Server bedient mehrere Clients; Organisation die Abarbeitung nicht gesichert
Hallo,
ich arbeite mit Delphi 2009 und verwende den Indy-TCP-Server zur Kommunikation mit mehreren Clients. Diese Clients schicken nun willkürlich Daten bzw Anfragen, auf die der Server reagieren soll. Das tut er auch. Hierfür werte ich im Execute-Event des Servers die Informationen aus und entscheide, was passiert. Entweder wird ein Datenpaket geschnürt und dem gleichen Client zurückgegeben, oder es wird nur die Anfrage nur quittiert. Meldet sich wärend der Zeit der Bearbeitung zufälligerweise ein andere Client, dann bricht der Server das Execute-Event ab und beginnt mit der Abarbeitung dieser Anfrage. Nun meine Frage: Kann man verhindern, dass die Anfrage das Execute-Ereignis abbricht, sondern wartet? Bei vielen Clients kommt es immer wieder vor, dass sich einer meldet, aber der andere noch nicht fertig bearbeitet wurde. Ich hoffe, es hat jemand einen Tip. Grüsse |
AW: Tcp-Server bedient mehrere Clients; Organisation die Abarbeitung nicht gesichert
Das tut er nicht das ist nur der Debuger
|
AW: Tcp-Server bedient mehrere Clients; Organisation die Abarbeitung nicht gesichert
>> Das tut er nicht das ist nur der Debuger <<
hmm.... ich hab ein Logfile mitlaufen, was alles mitschreibt und das sagt mir auch, das er das "Execute" des Servers abbricht und neu beginnt, sobald ein Client sich meldet. Was hat der Debugger damit zu tun? Grüsse |
AW: Tcp-Server bedient mehrere Clients; Organisation die Abarbeitung nicht gesichert
Dann hast du was falsch gemacht.
Ich habe in D2010 eine TcpServer laufen wo bis zu 100 Client gleichzeitig ihre Anfragen abarbeiten. |
AW: Tcp-Server bedient mehrere Clients; Organisation die Abarbeitung nicht gesichert
Wichtig ist dass die Zugriffe im Execute-Event thread-sicher programmiert sind.
|
AW: Tcp-Server bedient mehrere Clients; Organisation die Abarbeitung nicht gesichert
Zitat:
Aber was passiert bei Dir, wenn Clients zeitgleich anfragen? Über AContext.Bindigs.Peerip stelle ich fest, wer gerade ne Anfrage stellt. Kommt ne neue rein der verwirft er die IP und fängt mit der neuen Ip von vorn an. Meine ganze Abarbeitung findet im Execute-Ereignis statt und kann auch dauern ein paar Sekunden, was vielleicht nicht richtig ist. Oder muss ich vielleicht einen eigenen Thread für jeden Vorgang separat erzeugen? Wie machst Du das mit den Anfragen bei Gleichzeitigkeit? Grüsse |
AW: Tcp-Server bedient mehrere Clients; Organisation die Abarbeitung nicht gesichert
Zitat:
|
AW: Tcp-Server bedient mehrere Clients; Organisation die Abarbeitung nicht gesichert
Zitat:
Wie schon gesagt, muss man sich dieses Sachverhalts nur gewahr sein und Execute eben threadsicher programmieren. Zur Kontrolle könntest du ja mal am Anfang und am Ende von Execute entsprechende Log-Meldungen ausgeben - mit einem threadsicheren Logger natürlich. Oder die Poor-Programmer Lösung: InterlockedIncrement/Decrement auf eine globale (mit 0 initialisierte) Variable und am Ende schauen, ob die wieder 0 ist. |
AW: Tcp-Server bedient mehrere Clients; Organisation die Abarbeitung nicht gesichert
Danke für die Hilfe!! "Threadsicher" war das Stichwort. Ich hab nochmal alles kontrolliert und da war noch ne Variable, die ich übersehen hatte und damit alles durcheinander kam. Der Fehler sitzt fast immer vor dem Monitor. ;-)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz