AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Indy: Connect dauert unnötig lange
Thema durchsuchen
Ansicht
Themen-Optionen

Indy: Connect dauert unnötig lange

Ein Thema von Der schöne Günther · begonnen am 17. Jun 2019 · letzter Beitrag vom 17. Jun 2019
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Indy: Connect dauert unnötig lange

  Alt 17. Jun 2019, 12:58
In Wireshark fiel mir auf dass der Socket zwischen dem PC und einem Gerät sehr schnell aufgebaut wird, der PC allerdings erst 125 ms danach sich traut etwas zu schicken.

Ich wühlte etwas im Indy Sourcecode und siehe da:

IdIOHandlerStack.pas

Delphi-Quellcode:
procedure TIdIOHandlerStack.ConnectClient;

  procedure DoConnectTimeout(ATimeout: Integer);
  var
    LSleepTime: Integer;
    LThread: TIdConnectThread;
  begin
    if ATimeout = IdTimeoutDefault then begin
      ATimeout := IdTimeoutInfinite;
    end;
    LThread := TIdConnectThread.Create(Binding);
    try
      // IndySleep
      if TIdAntiFreezeBase.ShouldUse then begin
        LSleepTime := IndyMin(GAntiFreeze.IdleTimeOut, 125);
      end else begin
        LSleepTime := 125;
      end;

      if ATimeout = IdTimeoutInfinite then begin
        while not LThread.Terminated do begin
          IndySleep(LSleepTime);
          TIdAntiFreezeBase.DoProcess;
        end;
      end else
      begin
                                                                        
        // decrement by the sleep interval. If IndySleep() runs longer then
        // requested, that would slow down the loop and exceed the original
        // timeout that was requested...
        while (ATimeout > 0) and (not LThread.Terminated) do begin
          IndySleep(IndyMin(ATimeout, LSleepTime));
          TIdAntiFreezeBase.DoProcess;
          Dec(ATimeout, IndyMin(ATimeout, LSleepTime));
        end;
      end;

(...)
Abgesehen davon dass ich das mit einem reinen Sleep relativ ungeschickt gelöst finde (warum kein Event auf das gewartet wird) - Wie vernünftig sind hier die hartkodierten 125 ms? Ist das nicht ein bisschen sehr viel?
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Indy: Connect dauert unnötig lange

  Alt 17. Jun 2019, 17:32
Ich nutze faul das bei Delphi 10.0 Seattle mitgelieferte. In der Zwischenzeit scheint sich bei Indy an dieser Stelle etwas getan zu haben.

https://github.com/IndySockets/Indy/...Stack.pas#L275

Ich muss erst einmal rausfinden wie man seine Indy-Version aktualisiert, dann probiere ich es noch einmal.

Danke fürs Mitfiebern schon einmal.
  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 02:55 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