2015-01-04 4 views
1
while True: 
    data = resp.read(65536) 
    if not data: 
     break 
    yield data 

На самом деле я не прошу код, но принцип всего http-соединения.Как получить файловый ответ от веб-сервера?

Если я остановлю программу с одного выхода, например, отладки, где остальные мои данные ответа HTTP? Они все еще находятся на сервере или в памяти моего клиентского компьютера?

Если первый, что делает программа на веб-сервере, чтобы предотвратить кратковременное очистку данных от клиента? Контролировать поток по последовательности TCP?

+0

Какой тип 'resp'? Сокет? Блокировка или неблокирование? – cdarke

+0

Не имеет значения, это может быть urllib2, который предоставляет файл-подобный объект после использования urlopen или других инструментов, таких как библиотека запросов. – user3201982

ответ

1

Прежде всего, это зависит от вашей структуры. Обычно для полученных ответов используется Chunked HTTP Transfer. Таким образом, только клиенту передаются только те данные, которые были прочитаны. Данные не буферизуются на стороне сервера.

+0

Как сервер решает, будет ли он использовать кодировку с коротким передачей? По просьбе клиента? Или кто на земле принимает решение? – user3201982

+0

Вы решаете, уступая содержание. Никто не знает, сколько данных должно прибыть, пока ваша функция не будет закончена, но никто не хочет буферизовать неизвестный объем данных. – Daniel

+0

Немного смущает ... В любом случае, я должен написать надежную и эффективную клиентскую базу для загрузки на протоколе python и http. Один из способов - использовать заголовок Range с многопоточным, другой - иметь дело с файлоподобным ответом с закодированным кодированием и выходом (возможно, с сохранением памяти?). Какой из них вы предлагаете? – user3201982

0

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

+0

У вас есть ссылка на это? – cdarke

+0

Нет, это из моего инженерного опыта, если это неверно, укажите ошибки. –

+0

комментарий не был критическим, это был подлинный вопрос. – cdarke

Смежные вопросы