Also beim Server, habe ich das Senden in einem Thread jetzt so ausgelagert:
Delphi-Quellcode:
var
SendMsg : PAnsiString;
Daten : AnsiString;
outMsg : TIdBytes;
...
if ClientContext.Connection.Connected then
begin
while (Sendeliste.Count > 0) do
begin
var sw4 := TStopwatch.StartNew;
var t4 : Int64;
SendMsg := Sendeliste.Items[0];
Daten := SendMsg^;
SetLength(outMsg, Length(Daten));
Move(Daten[1], outMsg[0], Length(Daten));
t4 := sw4.ElapsedMilliseconds; //Zeitmessung stoppen
//Zeitmessung 01 auswerten
sw4 := TStopwatch.StartNew; //Zeitmessung starten
ClientContext.Connection.IOHandler.Write(outMsg);
t4 := sw4.ElapsedMilliseconds; //Zeitmessung stoppen
//Zeitmessung 02 auswerten
sw4 := TStopwatch.StartNew; //Zeitmessung starten
Dispose(SendMsg);
Sendeliste.Delete(0);
t4 := sw4.ElapsedMilliseconds; //Zeitmessung stoppen
//Zeitmessung 03 auswerten
end;
end
Zeitmessung 02 schlägt regelmäßig zu, 300ms ist normal (pro Aufruf), manchmal sogar länger.
Hast du eine Idee dazu?
Das ReadEvent habe ich über ein Merker geblockt, sodass in dem Moment kein Schreiben möglich ist. Da findet also in dem Moment nichts statt.