URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 4901
[ Назад ]

Исходное сообщение
"Вывод данных в Web через CGI-perl по мере поступления данных"

Отправлено jr , 23-Апр-07 12:57 
Есть некий скрипт, который во время своей работы постепенно (построчно) выводит информацию в STDOUT. Работать скрипт может достаточно долго, и если его вывод просто обернуть в CGI через perl, то пользователь, щелкнув на ссылку скрипта, будет очень долго ждать пока скрипт полностью завершит работу. Как сделать вывод в WEB так же постепенно (построчно), по мере поступления результатов работы скрипта в STDOUT?

Содержание

Сообщения в этом обсуждении
"Вывод данных в Web через CGI-perl по мере поступления данных"
Отправлено cat , 23-Апр-07 17:20 
>Есть некий скрипт, который во время своей работы постепенно (построчно) выводит информацию
>в STDOUT. Работать скрипт может достаточно долго, и если его вывод
>просто обернуть в CGI через perl, то пользователь, щелкнув на ссылку
>скрипта, будет очень долго ждать пока скрипт полностью завершит работу. Как
>сделать вывод в WEB так же постепенно (построчно), по мере поступления
>результатов работы скрипта в STDOUT?

#!/usr/bin/perl
use strict;
$|=1;#Вот это напишите в начале скрипта


"Вывод данных в Web через CGI-perl по мере поступления данных"
Отправлено jr , 23-Апр-07 17:26 
>#!/usr/bin/perl
>use strict;
>$|=1;#Вот это напишите в начале скрипта

Все это есть... Разобрался в чем дело.
Браузер (IE) не показывает информацию сразу, а хранит ее в своем буфере до определенного размера. Пробовал на другом браузере (не помню точно какой, вроде Firefox) - там все нормально отображается сразу в момент поступления данных.
Вот как ему (IE) сказать, чтобы он сразу рендерил то, что ему приходит? Там не хитрый html и его можно сразу показать.


"Вывод данных в Web через CGI-perl по мере поступления данных"
Отправлено A , 23-Апр-07 18:24 
>>#!/usr/bin/perl
>>use strict;
>>$|=1;#Вот это напишите в начале скрипта
>
>Все это есть... Разобрался в чем дело.
>Браузер (IE) не показывает информацию сразу, а хранит ее в своем буфере
>до определенного размера. Пробовал на другом браузере (не помню точно какой,
>вроде Firefox) - там все нормально отображается сразу в момент поступления
>данных.
>Вот как ему (IE) сказать, чтобы он сразу рендерил то, что ему
>приходит? Там не хитрый html и его можно сразу показать.

Почанкать всё


"Вывод данных в Web через CGI-perl по мере поступления данных"
Отправлено jr , 23-Апр-07 18:27 
>Почанкать всё


хм... что сие означает и как и где это применять?


"Вывод данных в Web через CGI-perl по мере поступления данных"
Отправлено A , 24-Апр-07 09:02 
>>Почанкать всё
>
>
>хм... что сие означает и как и где это применять?

http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html

3.6.1 Chunked Transfer Coding


"Вывод данных в Web через CGI-perl по мере поступления данных"
Отправлено A , 24-Апр-07 09:11 
на самом деле, не надо питать иллюзий. вы никогда не можете быть уверены, что клиент получает ваш документ по частям, потому, что существуют различные прокси и ПО выполняющее функции прокси. даже если вы отдаёте с сервера по частям, конечный клиент может получать данные непредсказуемым образом.

"Вывод данных в Web через CGI-perl по мере поступления данных"
Отправлено jr , 24-Апр-07 09:28 
>на самом деле, не надо питать иллюзий. вы никогда не можете быть
>уверены, что клиент получает ваш документ по частям, потому, что существуют
>различные прокси и ПО выполняющее функции прокси. даже если вы отдаёте
>с сервера по частям, конечный клиент может получать данные непредсказуемым образом.
>

Ну, в принципе, я уже понял, что на это расчитывать не стоит, но все-равно спасибо!
А вообще, какие есть методы реализации отображения информации в окне браузера клиента по мерее ее поступления?


"Вывод данных в Web через CGI-perl по мере поступления данных"
Отправлено A , 24-Апр-07 10:47 
>А вообще, какие есть методы реализации отображения информации в окне браузера клиента
>по мерее ее поступления?

с давних пор самым (на мой взгляд) надёжным и общепризнанным был метод передачи не самого 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-идеалогически правильно, но, возможно, ближе к вашей задаче)