Есть некий скрипт, который во время своей работы постепенно (построчно) выводит информацию в STDOUT. Работать скрипт может достаточно долго, и если его вывод просто обернуть в CGI через perl, то пользователь, щелкнув на ссылку скрипта, будет очень долго ждать пока скрипт полностью завершит работу. Как сделать вывод в WEB так же постепенно (построчно), по мере поступления результатов работы скрипта в STDOUT?
>Есть некий скрипт, который во время своей работы постепенно (построчно) выводит информацию
>в STDOUT. Работать скрипт может достаточно долго, и если его вывод
>просто обернуть в CGI через perl, то пользователь, щелкнув на ссылку
>скрипта, будет очень долго ждать пока скрипт полностью завершит работу. Как
>сделать вывод в WEB так же постепенно (построчно), по мере поступления
>результатов работы скрипта в STDOUT?#!/usr/bin/perl
use strict;
$|=1;#Вот это напишите в начале скрипта
>#!/usr/bin/perl
>use strict;
>$|=1;#Вот это напишите в начале скриптаВсе это есть... Разобрался в чем дело.
Браузер (IE) не показывает информацию сразу, а хранит ее в своем буфере до определенного размера. Пробовал на другом браузере (не помню точно какой, вроде Firefox) - там все нормально отображается сразу в момент поступления данных.
Вот как ему (IE) сказать, чтобы он сразу рендерил то, что ему приходит? Там не хитрый html и его можно сразу показать.
>>#!/usr/bin/perl
>>use strict;
>>$|=1;#Вот это напишите в начале скрипта
>
>Все это есть... Разобрался в чем дело.
>Браузер (IE) не показывает информацию сразу, а хранит ее в своем буфере
>до определенного размера. Пробовал на другом браузере (не помню точно какой,
>вроде Firefox) - там все нормально отображается сразу в момент поступления
>данных.
>Вот как ему (IE) сказать, чтобы он сразу рендерил то, что ему
>приходит? Там не хитрый html и его можно сразу показать.Почанкать всё
>Почанкать всё
хм... что сие означает и как и где это применять?
>>Почанкать всё
>
>
>хм... что сие означает и как и где это применять?http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html
3.6.1 Chunked Transfer Coding
на самом деле, не надо питать иллюзий. вы никогда не можете быть уверены, что клиент получает ваш документ по частям, потому, что существуют различные прокси и ПО выполняющее функции прокси. даже если вы отдаёте с сервера по частям, конечный клиент может получать данные непредсказуемым образом.
>на самом деле, не надо питать иллюзий. вы никогда не можете быть
>уверены, что клиент получает ваш документ по частям, потому, что существуют
>различные прокси и ПО выполняющее функции прокси. даже если вы отдаёте
>с сервера по частям, конечный клиент может получать данные непредсказуемым образом.
>Ну, в принципе, я уже понял, что на это расчитывать не стоит, но все-равно спасибо!
А вообще, какие есть методы реализации отображения информации в окне браузера клиента по мерее ее поступления?
>А вообще, какие есть методы реализации отображения информации в окне браузера клиента
>по мерее ее поступления?с давних пор самым (на мой взгляд) надёжным и общепризнанным был метод передачи не самого html, а javascript-кода document.write('html-код'). это заставляет браузер отобразить код, а не кэшировать его. такой метод использовался в древних чатах типа краватки, куличиков, болота... он отлично себя зарекомендовал ещё лет 10 назад. но тут возникают теже проблемы с проксями, всякими умными антивирусами, баннерорезками и прочей мишурой, которую устанавливают и пользователи и провайдоры.
сейчас (я полагаю) лучше использовать Ajax. это не совсем то, о чём вы спрашивали, но возможно вашу задачу можно переформулировать в Ajax-терминах. Ajax это железно :-) изменение страницы в нужный момент и желаемом объёме вам гарантировано.
вот мои примерчики:
http://michurin.com.ru/online-war.shtml (сервер генерит XML; ортодоксальный подход)
http://michurin.com.ru/online-nim.shtml (сервер генерит просто необходимые куски HTML-кода; это не совсем Ajax-идеалогически правильно, но, возможно, ближе к вашей задаче)