Forum Webscript.Ru
Программирование => Perl => Тема начата: ZMeY от 19 Января 2004, 22:33:11
-
Как заставить HTTP::Daemon отправить текст веб страницы? (в виде файла она не существует).
Причём отправить так, что бы страница прорисовывалась по мере отправки данных, а не после ПОЛНОЙ загрузки?
-
perldoc HTTP::Daemon
perldoc IO::Socket::INET
-
Читал я это всё.
Меня интересует как на практике передать браузеру страницу. (В ДОКУМЕНТАЦИИ ТОЛЬКО ПЕРЕДАЧА КОДА ОШИБКИ)
Не как пользоваться сокетом, а как по ХТТП передать страницу.
-
Все там написано - только головой думать нужно.
#!/usr/bin/perl
use strict;
use HTTP::Daemon;
my $d = new HTTP::Daemon
LocalAddr => \'localhost\',
LocalPort => 1010;
print "Please contact me at: url, ">\\n";
my $page = qq~
Privet I\'m the server
It works for me
Ha-ha-ha
~;
while (my $c = $d->accept) {
if (my $r = $c->get_request) {
print $c "HTTP/1.0 200 OK\\n\\n $page";
}
$c->close;
undef($c);
}
-
Головой я подумал и сваял нечто похожее НО видимо нечётко сформулировал вопрос. Эта страница отображается браузером ТОЛЬКО ПОСЛЕ закрытия сокета. А у меня задача - не закрывать сокет сразу, а дописыватиь данные по мере поступления....как сделать так, что бы браузер отображал данные сразу после получения?
-
Извини, недоглядел.
О вопросе - забудь, HTTP протокол не поддерживает постоянное соединение. Даже если клиент пошлет Connection: Keep-Alive нет никакой гарантии что сервер не закроет сокет(даже наоборот). В RFC 2616 по HTTP/1.1 есть упоминание o Persistent Connections, но реализаций я не видел. Чат пишеш? Тогда используй другой протокол.
-
Я конечно могу использовать простой сокет. хттп демон я использую только для обработки реквеста(может это нелогично). Остальные функции я использую как у обыкновенного сокета.
А вот насчёт других протоколов...я не совсем понял какой другой?
суть такая, что один из фреймов цепляется на динамически создаваемую скриптом http://localhost:5555/.. что-то в этом роде. Таие чаты существуют и больше того есть у меня исходники(но там уж сильно всё змаудрёно - чёрт ногу сломит)
Как можно заставить браузер отображать приходящую информацию? Другой протокол..но какой?
-
Эта страница отображается браузером ТОЛЬКО ПОСЛЕ закрытия сокета.
а если буферизацию отключить, не поможет ?
$| = 1;
(сорри, проверить сейчас не могу)
А насчет закрытия сокета сервером, то если никаких форс-мажорных ситуаций, то AFAIK это только при timeout-е соединения.
Чтобы этого не было иногда "фиктивный" HTTP-заголовок шлют
-
ZMeY:
А вот насчёт других протоколов...я не совсем понял какой другой?
Да хоть FTP ;)
Он поддерживает постоянное соединение.
Макс:
а если буферизацию отключить, не поможет ? $| = 1;
Нет это из другой сказки.
Макс:
Чтобы этого не было иногда "фиктивный" HTTP-заголовок шлют
Я так мыслю что это ХТТП серверу побоку.
Сори но я не нашел больше информации по этому вопросу. ZMeY если у тебя есть исходник - отправь его мне, может действительно там есть то что я пропустил.
-
NeoNox я не совсем понимаю...что ты имеешь ввиду. Время жизни ХТТП опрееляется строго сервером....а я как раз сервер и пишу. А насчёт постепенной загрузки - это возможно на 100%... за примером далеко ходить не надо - вспомни, как по модему грузится графика - зачастую постепенно, по мере загрузки, на не по мере полного получения. А ведь графика берётся отдельными реквестами, но своершенно идентичными простым реквестам.
-
NeoNox а какой там принцип?