Forum Webscript.Ru

Программирование => Perl => Тема начата: ZMeY от 19 Января 2004, 22:33:11

Название: HTTP::Daemon
Отправлено: ZMeY от 19 Января 2004, 22:33:11
Как заставить HTTP::Daemon отправить текст веб страницы? (в виде файла она не существует).

Причём отправить так, что бы страница прорисовывалась по мере отправки данных, а не после ПОЛНОЙ загрузки?
Название: HTTP::Daemon
Отправлено: NeoNox от 20 Января 2004, 11:25:16
perldoc HTTP::Daemon
perldoc IO::Socket::INET
Название: HTTP::Daemon
Отправлено: ZMeY от 20 Января 2004, 12:17:23
Читал я это всё.

Меня интересует как на практике передать браузеру страницу. (В ДОКУМЕНТАЦИИ ТОЛЬКО ПЕРЕДАЧА КОДА ОШИБКИ)

Не как пользоваться сокетом, а как по ХТТП передать страницу.
Название: HTTP::Daemon
Отправлено: NeoNox от 20 Января 2004, 14:27:27
Все там написано - только головой думать нужно.

#!/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::Daemon
Отправлено: ZMeY от 20 Января 2004, 15:11:23
Головой я подумал и сваял нечто похожее НО видимо нечётко сформулировал вопрос. Эта страница отображается браузером ТОЛЬКО ПОСЛЕ закрытия сокета. А у меня задача - не закрывать сокет сразу, а дописыватиь данные по мере поступления....как сделать так, что бы браузер отображал данные сразу после получения?
Название: HTTP::Daemon
Отправлено: NeoNox от 20 Января 2004, 17:01:35
Извини, недоглядел.
О вопросе - забудь, HTTP протокол не поддерживает постоянное соединение. Даже если клиент пошлет Connection: Keep-Alive нет никакой гарантии что сервер не закроет сокет(даже наоборот). В RFC 2616 по HTTP/1.1 есть упоминание o Persistent Connections, но реализаций я не видел.  Чат пишеш? Тогда используй другой протокол.
Название: HTTP::Daemon
Отправлено: ZMeY от 20 Января 2004, 20:47:23
Я конечно могу использовать простой сокет. хттп демон я использую только для обработки реквеста(может это нелогично). Остальные функции я использую как у обыкновенного сокета.

А вот насчёт других протоколов...я не совсем понял какой другой?

суть такая, что один из фреймов цепляется на динамически создаваемую скриптом http://localhost:5555/.. что-то в этом роде. Таие чаты существуют и больше того есть у меня исходники(но там уж сильно всё змаудрёно - чёрт ногу сломит)

Как можно заставить браузер отображать приходящую информацию? Другой протокол..но какой?
Название: HTTP::Daemon
Отправлено: Макс от 20 Января 2004, 22:09:57
Цитировать
Эта страница отображается браузером ТОЛЬКО ПОСЛЕ закрытия сокета.
а если буферизацию отключить, не поможет ?
$| = 1;
(сорри, проверить сейчас не могу)
А насчет закрытия сокета сервером, то если никаких форс-мажорных ситуаций, то AFAIK это только при timeout-е соединения.
Чтобы этого не было иногда "фиктивный" HTTP-заголовок шлют
Название: HTTP::Daemon
Отправлено: NeoNox от 21 Января 2004, 11:42:38
Цитировать
ZMeY:
А вот насчёт других протоколов...я не совсем понял какой другой?

Да хоть FTP ;)
Он поддерживает постоянное соединение.
Цитировать
Макс:
а если буферизацию отключить, не поможет ? $| = 1;

Нет это из другой сказки.
Цитировать
Макс:
Чтобы этого не было иногда "фиктивный" HTTP-заголовок шлют

Я так мыслю что это ХТТП серверу побоку.

Сори но я не нашел больше информации по этому вопросу. ZMeY если у тебя есть исходник - отправь его мне, может действительно там есть то что я пропустил.
Название: HTTP::Daemon
Отправлено: ZMeY от 21 Января 2004, 14:28:18
NeoNox я не совсем понимаю...что ты имеешь ввиду. Время жизни ХТТП опрееляется строго сервером....а я как раз сервер и пишу. А насчёт постепенной загрузки - это возможно на 100%... за примером далеко ходить не надо - вспомни, как по модему грузится графика - зачастую постепенно, по мере загрузки, на не по мере полного получения. А ведь графика берётся отдельными реквестами, но своершенно идентичными простым реквестам.
Название: HTTP::Daemon
Отправлено: ZMeY от 23 Января 2004, 15:35:26
NeoNox а какой там принцип?