Народ, подскажите пожалуйста, как создать нормальный чат на Perl'е без перезагрузки фреймов, чтобы новые сообщения просто дописывались в окно сообщений, либо хотя бы чтобы сообщения обновлялись только при появлении новых? Проблем с хостером быть не должно, время использования скриптов не ограничено... Если кто знает - посоветуйте готовые скрипты такого рода, чтобы их можно было изучить, или просто посоветуйте, каким методом воспользоваться?
> перл к фреймам имеет довольно косвенное отношение. > следует различать клиентские и серверные технологии. Я довольно неплохо разбираюсь в Perl'е и не путаю технологии. Вопрос был такой: как написать на Perl'е что-то типа daemon'а, который загружается один раз, а в дальнейшем просто отслеживает появление новых сообщений и пересылает их посетителю по мере поступления?
> в любом случае - обращение к серверу должно быть, Это сомнений не вызывает :)
> перегрузка чего-либо - тоже. А вот это вызывает...
> рекомендую обратиться к помощи литературы. Я и задал вопрос, кто какую литературу посоветует...
Литературу не посоветую, разве что стандарт HTTP перечитай...26.09.03 04:20 Автор: Ktirf <Æ Rusakov> Статус: Elderman
> > перл к фреймам имеет довольно косвенное отношение. > > следует различать клиентские и серверные технологии. > Я довольно неплохо разбираюсь в Perl'е и не путаю > технологии. Вопрос был такой: как написать на Perl'е что-то > типа daemon'а, который загружается один раз, а в дальнейшем > просто отслеживает появление новых сообщений и пересылает > их посетителю по мере поступления? Демона не демона, но держать постоянно процесс в памяти, а не загружать его каждый раз новый, вполне реально (смотрим в сторону, например, FastCGI). Только это тебе не поможет. Смотри ниже.
> > перегрузка чего-либо - тоже. > А вот это вызывает... Не может браузер постоянно держать открытое соединение через HTTP, он для этого не предназначен. HTTP - Pull-протокол. Следовательно, придется тебе на клиентской стороне время от времени дергать браузер, чтобы он шел на сервер за очередной порцией. А дальше эту порцию надо куда-то залить (правильно, в браузер, потому что именно он отправил HTTP-запрос). А теперь угадай, в какое место залитую порцию браузер может положить. Только срендерить HTML (или смотря что там пришло) в какой-нить фрейм. Ну и все, приехали.
Можно, конечно, нарисовать на клиентской стороне ActiveX или Java-апплет, но... ну в общем все всё поняли.
Я хотел бы сделать чат по типу http://clayser.com.ru/cgi-bin/chat/chat.pl (только не по дизайну, а по идее :) ). Вот интересно, как они там это реализовали? Фрейм сообщений не обновляется, они просто дописываются в конец страницы...
Есть такая возможность26.09.03 09:22 Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
Один мой знакомый наваял такое на JSP. Уверен что на перле это тоже возможно. Суть в том что ты не закрываешь сокет, а понемногу отдаешь данные в поток. То есть выглядит это так:
У клиента.
1. Фрейм в котором постоянно открыт сокет.
2. фрейм в котором ты пишешь реплику и отсылаешь на сервак.
У сервера.
1. ЦГИха которая получает реплику и сует её в базюку (файл)
2. ЦГИха которая незакрывая_сокети соответсвенно не выходя регулярно (или по каким-то семафорам) опрашивает базюку и получив новые реплики кидает их в stdout.
Проблемсы:
На браузере IE4.x замечалось обрывание этого соединения при каком-то таймауте. Лечилось регулярной посылкой <!-- PING --> . На экране ничего не отображалось, а браузер не дох.
Все, больше проблемсов не было.
[Perl] Re: Есть такая возможность26.09.03 14:15 Автор: Overlord [AHT] Статус: Незарегистрированный пользователь
Если можно, расскажи подробнее про этот вариант. Так вроде все понятно, но с чего за это взяться? Идеальным примером был бы небольшой фрагмент кода на perl'е.
[Perl] Перла не помню26.09.03 14:44 Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
...вот тебе на шелле код. Захочешь - спортируешь.
> Если можно, расскажи подробнее про этот вариант. Так вроде > все понятно, но с чего за это взяться? Идеальным примером > был бы небольшой фрагмент кода на perl'е.
#!/bin/sh
#
echo "Content-type:text/html"
echo ; echo
echo "<html><body><h3>Welcome to super-duper megachat</h3><hr>"
while :
do
if [ -f logout.dat ] ;then exit;fi
if [ -f message.txt ] ;then
echo "<br>"
cat message.txt
fi
sleep 1
done
---
Создашь файлик logout.dat в каталоге со скриптом - он прекратит работу, создашь файлик mesage.txt - он его содержимое выдаст чаттеру. И все без рефрешей :)
отвалишься по таймауту. не сервер, так браузер отбросит.29.09.03 01:23 Автор: Eugene Статус: Незарегистрированный пользователь
> главное - не ясно как к этому подходу отнесется > когда-нибудь какой-нибудь IE9.0 и тп. Примерно в следующем виде:
<!-- PING -->
Типа данные продолжают поступать, нет причин отваливаться.
Вот только одно не радует. Ну уж очень будет расти сама html-ка. Надо обязательно предусмотреть полный релоад через некоторый промежуток времени (минут 20 хотя бы: 3 релоада в час не сильно напрягут по трафику ИМХО, хотя можно и реже).
Хм, да, извиняюсь, про такой ход забыл.26.09.03 13:02 Автор: Ktirf <Æ Rusakov> Статус: Elderman
делается фрейм нулевой геометрии, он каждый раз обновляется, в нем строится JS, который вставляет содержимое в видимый фрейм. Этот вариант гибче, т.к позволяет изменять порядок вывода сообщений(
например: снизу-вверх сверху-вниз).
[Perl] Эээ...26.09.03 14:46 Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
> Стоп. Я так понял что наша цель это чатбезобновлений. незакрывать соеденение конечно можно. получится что фрейм грузится бесконечно.
только что скажет хостер на такое количество одновременно открытых коннектов к серверу.
лично мне больше по душе вариант с javascript который предлагает trent.
как-то он изящней выглядит. да и в примере сделано именно так....
жаль только не работает в мозиле :)))))
а на [Perl] можно написать irc клиента?26.09.03 02:50 Автор: Killer{R} <Dmitry> Статус: Elderman
Странный вопрос - конечно, можно. Но тут товарищ просит серверные скрипты, насколько я понял.26.09.03 04:12 Автор: Ktirf <Æ Rusakov> Статус: Elderman Отредактировано 26.09.03 04:22 Количество правок: 1