Как получить текущую пропускную способность (скорость загрузки)? - PullRequest
7 голосов
/ 28 декабря 2011

Как узнать текущую скорость передачи с помощью IdTCPServer или IdTCPClient?

Я хочу знать, как быстро клиент загружает данные с сервера?

Например: скорость загрузки: 450 кбит / с

1 Ответ

10 голосов
/ 28 декабря 2011

Назначить обработчики для событий OnWorkBegin, OnWork и OnWorkEnd объекта TIdTCPConnection соединения. Событие OnWorkBegin имеет параметр AWorkCountMax, который дает вам общее количество ожидаемых передаваемых байтов (если известно заранее). Событие OnWork имеет параметр AWorkCount, который дает вам промежуточную сумму того, сколько байтов фактически было передано с момента запуска события OnWorkBegin.

Всякий раз, когда происходит событие OnWork, вычтите предыдущее значение AWorkCount из текущего значения AWorkCount, чтобы определить, сколько байтов было передано между двумя событиями, а затем разделите это значение на количество времени, в течение которого прошло между этими двумя событиями. С этим последним значением вы можете при необходимости вычислить b / sec, kb / sec, mb / sec и т. Д.

В зависимости от того, как именно вы отправляете / получаете ваши данные, вам может потребоваться вручную вызвать методы BeginWork() и EndWork() для TIdTCPConnection, чтобы получить события OnWork... для запуска. Большинство методов чтения / записи в Indy не вызывают Begin/EndWork() внутри.

...