Xpoint
   [напомнить пароль]

Выдача Gzip-данных порциями

Метки: [без меток]
2005-01-27 14:11:24 [обр] Антон Сущев aka Ant(0/6)[досье]

Можно ли как-то добится того, чтобы при autoflush'е порциями выдавать Gzip данные?

Код

#!/usr/bin/perl

$| = 1; # autoflush

use Compress::Zlib;

print "Content-Encoding: gzip\n";
print "Content-Type: text/html\n\n";

$qwe = Compress::Zlib::memGzip("123");
$asd = Compress::Zlib::memGzip("456");

print $qwe;
print $asd;

Выведет только строку «123», содержащуюся в переменной «$qwe». Строка «456» браузером получена/отображена не будет.

спустя 10 часов [обр] Владимир Палант(49/4445)[досье]
Мне кажется, что браузеры не поддерживают распаковку gzip-данных по кускам. Не слишком ясно, как gzip вообще может сочетаться с Transfer-Encoding: chunked — либо каждый кусок упакован отдельно, но тогда на это нужен отдельный стандарт, который мне не попадался, либо это куски большого упакованного файла, но тогда проблема в распаковке "on the fly". Когда-то я специально покопался в исходниках mod_gzip и обнаружил, что упаковку данных кусками он не поддерживает принципиально и всегда удаляет chunked из заголовка — думаю, что не без причины.
спустя 10 часов [обр] Антон Сущев aka Ant(0/6)[досье]
Владимир Палант[досье] то есть, другими словами говоря, Gzip данные в принципе невозможно (по крайней мере пока) отсылать порциями?
спустя 2 часа 54 минуты [обр] Андрей Новиков(20/1242)[досье]
Вроде да.
спустя 11 часов [обр] Антон Сущев aka Ant(0/6)[досье]
Ясно. Спасибо.
спустя 4 дня [обр] Антон Сущев aka Ant(0/6)[досье]
Кстати говоря, в Opera этот код работает прекрасно. Вот уж бы не подумал...
спустя 46 минут [обр] Владимир Палант(49/4445)[досье]
Ну, интерпретировать такие данные можно, конечно — просто стандарта никакого нет. Ну и надо иметь в виду, что при упаковке каждого куска отдельно падает эффективность сжатия. Если куски маленькие, то смысла что-то сжимать вообще нет — будет только хуже.
спустя 1 год 2 месяца [обр] Даниэль Алиевский(9/125)[досье]
Увидел эту тему, хоть и поздно, конечно. Мой WebWarper всегда выдавал gzip-данные по кускам. Загрузил немного с исходного сервера, запаковал, отправил клиенту, загрузил еще немного, запаковал, отправил. Вроде никаких проблем не наблюдалось.
спустя 4 часа 51 минуту [обр] Владимир Палант(49/4445)[досье]
Даниил, а Transfer-Encoding: chunked вы при этом использовали? Вы это только для собственного удобства делали или вам удалось добиться постепенного отображения страницы браузером?
спустя 2 часа 52 минуты [обр] Даниэль Алиевский(9/125)[досье]

Нет, не использовал. А страницы, действительно, отображаются броузером постепенно. Легко проверить: откройте на не очень быстром канале http://webwarper.net/ru/~av/lib.ru/NTL/MED/PUBLICISTIKA/ANDREEW/3k.txt (умолчательный URL, предлагаемый на моей главной русской странице).

Вначале (очень давно) я всегда загружал и gzip-овал страницу целиком. Визуально выглядело ужасающе: ведь многие сайты (скажем, русские) на американский webwarper.net загружались очень небыстро.

спустя 1 месяц 24 дня [обр] Антон Сущев aka Ant(0/6)[досье]
Даниил, а если не секрет, какой именно алгоритм вы используете, отдавая данные в Gzip кусками? Просто пакуете куски и отсылаете клиенту?
спустя 3 часа 8 минут [обр] Даниэль Алиевский(9/125)[досье]
Антон Сущев aka Ant[досье] Именно. Там вообще-то все очевидно: используйте тот же алгоритм, что и для упаковки большого файла на диск (кусками), только упакованные куски вместо диска отсылайте клиенту.
Powered by POEM™ Engine Copyright © 2002-2005