Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Браузер не выводит весь ответ скрипта, Помогите разобраться.  
V
    Опции темы
d0k
  Дата 16.2.2010, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 27.5.2005

Репутация: нет
Всего: нет



Скрипт обрабатывает запрос и выводит ответ. Замечу сразу, что скрипт использует LWP и выводит ответ (строки) поочередно с некоторой паузой после проверки.

В браузерах почему-то соединение со скриптом разрывается после некоего таймаута и выводится только  2-3 первых результата.

В чем причина? smile 

Как (с помощью каких заголовков) заставить браузеры ждать ответ скрипта полностью.



Это сообщение отредактировал(а) d0k - 16.2.2010, 12:17
PM MAIL   Вверх
klem4
Дата 16.2.2010, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 27.7.2008

Репутация: нет
Всего: 2



Думаю Вам нужно покопаться в настройках Apache или тоге сервера который Вы используете. В Apache посмотрите директиву TimeOut

Код

TimeOut Directive
Description:    Amount of time the server will wait for certain events before failing a request
Syntax:    TimeOut seconds
Default:    TimeOut 300
Context:    server config, virtual host
Status:    Core
Module:    core


Это сообщение отредактировал(а) klem4 - 16.2.2010, 22:19
PM MAIL   Вверх
Nab
Дата 16.2.2010, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 25.3.2006
Где: Kiev

Репутация: 8
Всего: 37



Ну во первых, сам протокол HTTP на такое не расчитан. Хотя и есть Keep-Alive но и он имеет таймаут. 

А в действительности здесь 2 параметра влияют: 
Первый, таймаут сервера. Это когда сам апач к примеру ждет выполнения долгоиграющего скрипта по моему секунд 30. Потом тупо убивает процесс.
Второе таймаут браузера, С этим сложнее, тут вообще никак повлиять нельзя.


Решения:

Переписать скрипты пооптимальнее, чтобы время отклика было в разумных пределах.

Узнать что первым отваливается сервер или клиент. Если сервер то поднять время таймаута. Сами ищите в настройках как называется.

Если отваливается клиент, то когда-то давно я надыбал чье-то оригинальное решение. Пока скрипт не сформировал полностью контент он должен хоть чтото сделать, чтобы удержать клиента. И для этого подойдет периодическая, раз в секунду или даже реже, отправка скриптом символа с кодом \0. Ну то есть нультерминированной пустой строки. Это не даст повода браузеру закрыть соединение да и сервер будет какую-то активность поддерживать. При этом в вывод ничего не попадет. Конечно если браузер ожидает получить текстовый контент.

Ну или применить туже технологию которая применяется для показа upload прогресс бара, при отправке файлов на сервер, Js+ AJAX.


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
d0k
Дата 17.2.2010, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 27.5.2005

Репутация: нет
Всего: нет



Сама конфигурация апача мне недоступна - сайт на виртуальном хостинге.
Спасибо за советы, попробую с постоянным выводом от скрипта нулевого символа для удержания клиента.

Но есть одина особенность в этом во всем - ниже скрипт:

Код

#!/usr/bin/perl -w
$|=1;

use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use Time::localtime; 

my ($thour,$tmin,$tsec,$tday,$tmon,$tyear);

print "Content-Type: text/html\n";
print "Connection: Keep-Alive\n";
print "Pragma: no-cache\n\n";


my $r=20;
header(); #----- выводит шапку html
while ( $r>0 ){
tm();
print "-=$r=- $tyear-$tmon-$tday   $thour:$tmin:$tsec <br>";
open ( FILE,">>out-tmp.txt");
print FILE "-=$r=-\n";
print FILE " $tyear-$tmon-$tday   $thour:$tmin:$tsec\n";
close (FILE);
sleep 15;
$r--;
}

footer();  #-----выводит закрывающие тэги </body> </html>


exit;


sub tm{
$thour=localtime->hour();
$tmin=localtime->min();
$tsec=localtime->sec();
$tday=localtime->mday();
$tmon=localtime->mon()+1;
$tyear=localtime->year()+1900;
}


sub header{
print <<'htmtags'
<html>
<head>
<title>test</title>
<meta http-equiv="PRAGMA" content="no-cache"> 
<meta http-equiv="Cache-Control" content="no-cache"> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#000000" text="#FFFF00">
htmtags
}


sub footer{
print <<'htmtags'
</body>
</html>
htmtags
}


Этот скрипт без проблем работает и браузер ждет пока  скрипт полностью выполниться и постепенно выводит результат.

Но стоит в цикле использовать LWP - соединение теряется, как я и описывал выше.
Может администраторы хостинга  специально уменьшают минимальный таймаут ответа =(

Это сообщение отредактировал(а) d0k - 17.2.2010, 23:24
PM MAIL   Вверх
shamber
Дата 18.2.2010, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1422
Регистрация: 5.9.2006
Где: Россия

Репутация: нет
Всего: 18



Цитата(d0k @  17.2.2010,  16:49 Найти цитируемый пост)
Может администраторы хостинга  специально уменьшают минимальный таймаут ответа =(

вполне возможно... никому не хочется чтобы их сервак вешали smile

Это сообщение отредактировал(а) shamber - 19.2.2010, 09:35
PM MAIL Jabber   Вверх
Nab
Дата 19.2.2010, 03:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 25.3.2006
Где: Kiev

Репутация: 8
Всего: 37



Цитата(d0k @  17.2.2010,  16:49 Найти цитируемый пост)
Но стоит в цикле использовать LWP - соединение теряется, как я и описывал выше.Может администраторы хостинга  специально уменьшают минимальный таймаут ответа =(

Хахаха smile
Большинство хостеров вообще запрещают коннект с хоста наружу. Чтоб не рисовали свои прокси не  строили ботнеты и т.д. Тем более в цикле smile 

Спросите у своего хостера, разрешает ли он исходящие соединения.


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
tishaishii
Дата 19.2.2010, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Создатель
***


Профиль
Группа: Завсегдатай
Сообщений: 1262
Регистрация: 14.2.2006
Где: Москва

Репутация: нет
Всего: 8



Есть такая схема работы клиент\сервер, называется NPH - вывод документа по частям, когда соединение не разрывается, покуда работает скрипт.

http://perldoc.perl.org/CGI.html#USING-NPH-SCRIPTS
PM MAIL ICQ Skype   Вверх
Nab
Дата 22.2.2010, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 582
Регистрация: 25.3.2006
Где: Kiev

Репутация: 8
Всего: 37



tishaishii, внимательно ознакомтесь с тем что предлагаете, вы вообще пробовали расшифровать что значит NPH?


--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
d0k
  Дата 28.2.2010, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 27.5.2005

Репутация: нет
Всего: нет



Всем спасибо за советы, разобрался: админы хостинга таймауты при исходящих запросах сократили до 1с, почему так и не объяснили. 

Это сообщение отредактировал(а) d0k - 28.2.2010, 22:37
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0778 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.