Почему последний кусок HTTP-загрузки действительно медленный? - PullRequest
0 голосов
/ 21 сентября 2009

у меня есть длина контента доступна в начале загрузки. так что я знаю, сколько байтов мне нужно запросить. Я загружаю кусками по 1024 байта. в последнем блоке я запрашиваю количество оставшихся байтов. Я использую функцию чтения. но последний кусок занимает много времени, чтобы прибыть. это нормально?

Ответы [ 3 ]

3 голосов
/ 21 сентября 2009

Возможно, ваш последний кусок недостаточно велик для очистки буфера.

Вы можете проверить, как очистить fd и сделать это вручную после отправки последнего чанка.

2 голосов
/ 21 сентября 2009

Нет. Я предполагаю, что сервер пропускает вызов flush(), поэтому вывод зависает в некотором буфере, пока не получит тайм-аут (а затем сервер будет сброшен).

0 голосов
/ 21 сентября 2009

Спасибо я понял проблему. мой код использует буфер уровня приложения и, следовательно, загрузка последнего фрагмента занимает много времени. Я использовал надежные функции ввода-вывода, приведенные в книге Брайанта. Я изучил этот код некоторое время назад и забыл об этом. я пересмотрел код и обнаружил, что в буфере используется код.

книга Брайанта - функции Рио

Еще одна ошибка, которую я делал, - использование HTTP / 1.1. HTTP 1.0 заставляет сервер закрывать соединение после передачи данных. Так что это решило проблему.

...