从 Indy 的 IdTCPServer 获取大量 "Read timed out" 异常

Getting a lot of "Read timed out" exceptions from Indy's IdTCPServer

"Read timed out" 50% 的连接请求在 ReadBytes(B1, 600, False) 处引发异常,20% 的连接请求在 ReadBytes(B3, 5, False) 处引发异常。所以只有少数连接正确完成。 我知道在客户端生成 600 个字节的过程不会超过 2 秒。顺便说一句,如果我将 ReadTimeout 从 10000 增加到 20000,结果不会有任何改善。 大约有 50 个客户端通常在不同的时间连接,因此我们的服务器并不拥挤。 我通过设置 ReadTimeout 的目的是在出现问题时尽快关闭连接。 我的代码有什么问题还是我应该在其他地方搜索问题?

procedure TForm1.IdTCPServerExecute(AContext: TIdContext);
var
  Log: TConnectionLog;
  B1, B2, B3: TIdBytes;
begin
  try
    try
      Log := TConnectionLog.Create;
      Log.ConnectDateTime := Now;
      Log.ClientIP := AContext.Binding.PeerIP;

      AContext.Connection.IOHandler.ReadTimeout := 10000; 
      AContext.Connection.IOHandler.ReadBytes(B1, 600, False);
      AContext.Connection.IOHandler.ReadTimeout := IdTimeoutDefault;
      Log.Bytes600ReceiveDateTime := Now;

      SetLength(B2, 200);
      AContext.Connection.IOHandler.Write(B2);
      Log.Bytes200SendDateTime := Now;

      AContext.Connection.IOHandler.ReadTimeout := 15000; 
      AContext.Connection.IOHandler.ReadBytes(B3, 5, False);
      AContext.Connection.IOHandler.ReadTimeout := IdTimeoutDefault;
      Log.Bytes5ReceiveDateTime := Now;
    except
      on E: Exception do
      begin
        Log.ExceptionMessage := E.Message;
        raise;
      end;
    end;
  finally
    TThread.Synchronize(nil,
      procedure
      begin
        SaveLog(Log);
      end);
    Log.Free;
  end;
end;

Delphi 10.2; 印地 10.6.2; 网络类型:2G/GPRS

在Remy Lebeau的指导下,我做了多日的网络流量监控,发现问题是由于网络质量低下引起的,其中大于100字节的TCP段大部分都丢失了时代!