| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: разработка для Web > Браузер не выводит весь ответ скрипта |
| Автор: d0k 16.2.2010, 01:44 |
| Скрипт обрабатывает запрос и выводит ответ. Замечу сразу, что скрипт использует LWP и выводит ответ (строки) поочередно с некоторой паузой после проверки. В браузерах почему-то соединение со скриптом разрывается после некоего таймаута и выводится только 2-3 первых результата. В чем причина? Как (с помощью каких заголовков) заставить браузеры ждать ответ скрипта полностью. |
| Автор: klem4 16.2.2010, 22:18 | ||
Думаю Вам нужно покопаться в настройках Apache или тоге сервера который Вы используете. В Apache посмотрите директиву TimeOut
|
| Автор: Nab 16.2.2010, 23:08 |
| Ну во первых, сам протокол HTTP на такое не расчитан. Хотя и есть Keep-Alive но и он имеет таймаут. А в действительности здесь 2 параметра влияют: Первый, таймаут сервера. Это когда сам апач к примеру ждет выполнения долгоиграющего скрипта по моему секунд 30. Потом тупо убивает процесс. Второе таймаут браузера, С этим сложнее, тут вообще никак повлиять нельзя. Решения: Переписать скрипты пооптимальнее, чтобы время отклика было в разумных пределах. Узнать что первым отваливается сервер или клиент. Если сервер то поднять время таймаута. Сами ищите в настройках как называется. Если отваливается клиент, то когда-то давно я надыбал чье-то оригинальное решение. Пока скрипт не сформировал полностью контент он должен хоть чтото сделать, чтобы удержать клиента. И для этого подойдет периодическая, раз в секунду или даже реже, отправка скриптом символа с кодом \0. Ну то есть нультерминированной пустой строки. Это не даст повода браузеру закрыть соединение да и сервер будет какую-то активность поддерживать. При этом в вывод ничего не попадет. Конечно если браузер ожидает получить текстовый контент. Ну или применить туже технологию которая применяется для показа upload прогресс бара, при отправке файлов на сервер, Js+ AJAX. |
| Автор: d0k 17.2.2010, 16:49 | ||
| Сама конфигурация апача мне недоступна - сайт на виртуальном хостинге. Спасибо за советы, попробую с постоянным выводом от скрипта нулевого символа для удержания клиента. Но есть одина особенность в этом во всем - ниже скрипт:
Этот скрипт без проблем работает и браузер ждет пока скрипт полностью выполниться и постепенно выводит результат. Но стоит в цикле использовать LWP - соединение теряется, как я и описывал выше. Может администраторы хостинга специально уменьшают минимальный таймаут ответа =( |
| Автор: Nab 19.2.2010, 03:29 | ||
Хахаха Большинство хостеров вообще запрещают коннект с хоста наружу. Чтоб не рисовали свои прокси не строили ботнеты и т.д. Тем более в цикле Спросите у своего хостера, разрешает ли он исходящие соединения. |
| Автор: tishaishii 19.2.2010, 18:50 |
| Есть такая схема работы клиент\сервер, называется NPH - вывод документа по частям, когда соединение не разрывается, покуда работает скрипт. http://perldoc.perl.org/CGI.html#USING-NPH-SCRIPTS |
| Автор: Nab 22.2.2010, 13:56 |
| tishaishii, внимательно ознакомтесь с тем что предлагаете, вы вообще пробовали расшифровать что значит NPH? |
| Автор: d0k 28.2.2010, 22:36 |
| Всем спасибо за советы, разобрался: админы хостинга таймауты при исходящих запросах сократили до 1с, почему так и не объяснили. |