Автор Тема: HTTP::Daemon  (Прочитано 4421 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ZMeY

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 54
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
HTTP::Daemon
« : 19 Января 2004, 22:33:11 »
Как заставить HTTP::Daemon отправить текст веб страницы? (в виде файла она не существует).

Причём отправить так, что бы страница прорисовывалась по мере отправки данных, а не после ПОЛНОЙ загрузки?

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
HTTP::Daemon
« Ответ #1 : 20 Января 2004, 11:25:16 »
perldoc HTTP::Daemon
perldoc IO::Socket::INET
The documentations is your friend

Оффлайн ZMeY

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 54
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
HTTP::Daemon
« Ответ #2 : 20 Января 2004, 12:17:23 »
Читал я это всё.

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

Не как пользоваться сокетом, а как по ХТТП передать страницу.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
HTTP::Daemon
« Ответ #3 : 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:", $d->url, ">\\n";
my $page = qq~
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>Privet I\'m the server</TITLE>
</HEAD><BODY>
<H1>It works for me</H1>
Ha-ha-ha
</BODY></HTML>
~;

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);
}

« Последнее редактирование: 20 Января 2004, 14:32:45 от NeoNox »
The documentations is your friend

Оффлайн ZMeY

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 54
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
HTTP::Daemon
« Ответ #4 : 20 Января 2004, 15:11:23 »
Головой я подумал и сваял нечто похожее НО видимо нечётко сформулировал вопрос. Эта страница отображается браузером ТОЛЬКО ПОСЛЕ закрытия сокета. А у меня задача - не закрывать сокет сразу, а дописыватиь данные по мере поступления....как сделать так, что бы браузер отображал данные сразу после получения?

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
HTTP::Daemon
« Ответ #5 : 20 Января 2004, 17:01:35 »
Извини, недоглядел.
О вопросе - забудь, HTTP протокол не поддерживает постоянное соединение. Даже если клиент пошлет Connection: Keep-Alive нет никакой гарантии что сервер не закроет сокет(даже наоборот). В RFC 2616 по HTTP/1.1 есть упоминание o Persistent Connections, но реализаций я не видел.  Чат пишеш? Тогда используй другой протокол.
The documentations is your friend

Оффлайн ZMeY

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 54
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
HTTP::Daemon
« Ответ #6 : 20 Января 2004, 20:47:23 »
Я конечно могу использовать простой сокет. хттп демон я использую только для обработки реквеста(может это нелогично). Остальные функции я использую как у обыкновенного сокета.

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

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

Как можно заставить браузер отображать приходящую информацию? Другой протокол..но какой?

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
HTTP::Daemon
« Ответ #7 : 20 Января 2004, 22:09:57 »
Цитировать
Эта страница отображается браузером ТОЛЬКО ПОСЛЕ закрытия сокета.
а если буферизацию отключить, не поможет ?
$| = 1;
(сорри, проверить сейчас не могу)
А насчет закрытия сокета сервером, то если никаких форс-мажорных ситуаций, то AFAIK это только при timeout-е соединения.
Чтобы этого не было иногда "фиктивный" HTTP-заголовок шлют
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
HTTP::Daemon
« Ответ #8 : 21 Января 2004, 11:42:38 »
Цитировать
ZMeY:
А вот насчёт других протоколов...я не совсем понял какой другой?

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

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

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

Сори но я не нашел больше информации по этому вопросу. ZMeY если у тебя есть исходник - отправь его мне, может действительно там есть то что я пропустил.
The documentations is your friend

Оффлайн ZMeY

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 54
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
HTTP::Daemon
« Ответ #9 : 21 Января 2004, 14:28:18 »
NeoNox я не совсем понимаю...что ты имеешь ввиду. Время жизни ХТТП опрееляется строго сервером....а я как раз сервер и пишу. А насчёт постепенной загрузки - это возможно на 100%... за примером далеко ходить не надо - вспомни, как по модему грузится графика - зачастую постепенно, по мере загрузки, на не по мере полного получения. А ведь графика берётся отдельными реквестами, но своершенно идентичными простым реквестам.

Оффлайн ZMeY

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 54
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
HTTP::Daemon
« Ответ #10 : 23 Января 2004, 15:35:26 »
NeoNox а какой там принцип?

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28