Einzelnen Beitrag anzeigen

Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: Indy IdTCPClient/IdTCPServer CPU Auslastung 100%

  Alt 4. Feb 2010, 15:12
@AlBo:

Wenn der Server auf 100% Last geht, wenn der Client sich abmeldet liegt es
daran das der Client sich nicht "sauber" abmeldet.
Der Indy-Server ist da etwas penibel, am besten der Client schickt ein "Quit" Signal und danach trennen
Server und Client beide die Verbindung.

Zusätzlich sollte im Server.OnExecute noch mit Check eingebaut werden:

Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
begin
  // Prüfen ob Daten für die Verbindung vorhanden sind, dabei wird Status der Verbindung ebenfalls überprüft
  AContext.Connection.Socket.CheckForDataOnSource(500);
  // WEnn keine Daten vorhanden dann raus hier
  if AContext.Connection.Socket.InputBufferIsEmpty then exit;

  // Daten kommen jetzt wie gewohnt verarbeiten ...
end;
So bekommt der Server auch mit falls sich ein Client "unsauber" (z.B. WLAN Signal weg) abmeldet.
Trotzdem gehört so einem "sauberen" Protokoll ein "Quit" Signal.


[Edit]:

Wo wird den beim Server Deine Variable Lauf auf False gesetzt ?
OnExecute wird innerhalb eines Threads OnExecute ausgeführt und tritt immer wieder ein,
Da brauch/sollte eigentlich keine Schleife rein

Greetz Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat