Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[Perl] Чат без перезагрузки фреймов 26.09.03 02:19
Автор: Overlord [AHT] Статус: Незарегистрированный пользователь
|
Народ, подскажите пожалуйста, как создать нормальный чат на Perl'е без перезагрузки фреймов, чтобы новые сообщения просто дописывались в окно сообщений, либо хотя бы чтобы сообщения обновлялись только при появлении новых? Проблем с хостером быть не должно, время использования скриптов не ограничено... Если кто знает - посоветуйте готовые скрипты такого рода, чтобы их можно было изучить, или просто посоветуйте, каким методом воспользоваться?
|
|
inside 26.09.03 02:54
Автор: Eugene Статус: Незарегистрированный пользователь
|
перл к фреймам имеет довольно косвенное отношение.
следует различать клиентские и серверные технологии.
в любом случае - обращение к серверу должно быть, перегрузка чего-либо - тоже.
рекомендую обратиться к помощи литературы.
|
| |
inside 26.09.03 03:14
Автор: Overlord [AHT] Статус: Незарегистрированный пользователь
|
> перл к фреймам имеет довольно косвенное отношение. > следует различать клиентские и серверные технологии. Я довольно неплохо разбираюсь в Perl'е и не путаю технологии. Вопрос был такой: как написать на Perl'е что-то типа daemon'а, который загружается один раз, а в дальнейшем просто отслеживает появление новых сообщений и пересылает их посетителю по мере поступления?
> в любом случае - обращение к серверу должно быть, Это сомнений не вызывает :)
> перегрузка чего-либо - тоже. А вот это вызывает...
> рекомендую обратиться к помощи литературы. Я и задал вопрос, кто какую литературу посоветует...
|
| | |
Литературу не посоветую, разве что стандарт HTTP перечитай... 26.09.03 04:20
Автор: Ktirf <Æ Rusakov> Статус: Elderman
|
> > перл к фреймам имеет довольно косвенное отношение. > > следует различать клиентские и серверные технологии. > Я довольно неплохо разбираюсь в Perl'е и не путаю > технологии. Вопрос был такой: как написать на Perl'е что-то > типа daemon'а, который загружается один раз, а в дальнейшем > просто отслеживает появление новых сообщений и пересылает > их посетителю по мере поступления? Демона не демона, но держать постоянно процесс в памяти, а не загружать его каждый раз новый, вполне реально (смотрим в сторону, например, FastCGI). Только это тебе не поможет. Смотри ниже.
> > перегрузка чего-либо - тоже. > А вот это вызывает... Не может браузер постоянно держать открытое соединение через HTTP, он для этого не предназначен. HTTP - Pull-протокол. Следовательно, придется тебе на клиентской стороне время от времени дергать браузер, чтобы он шел на сервер за очередной порцией. А дальше эту порцию надо куда-то залить (правильно, в браузер, потому что именно он отправил HTTP-запрос). А теперь угадай, в какое место залитую порцию браузер может положить. Только срендерить HTML (или смотря что там пришло) в какой-нить фрейм. Ну и все, приехали.
Можно, конечно, нарисовать на клиентской стороне ActiveX или Java-апплет, но... ну в общем все всё поняли.
|
| | | |
Пример 26.09.03 05:27
Автор: Overlord [AHT] Статус: Незарегистрированный пользователь
|
Я хотел бы сделать чат по типу 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 и тп.
|
| | | | | | | | |
Чтоб не отвалиться можно периодически пинги слать 29.09.03 08:28
Автор: amirul <Serge> Статус: The Elderman
|
> главное - не ясно как к этому подходу отнесется > когда-нибудь какой-нибудь IE9.0 и тп. Примерно в следующем виде:
<!-- PING -->
Типа данные продолжают поступать, нет причин отваливаться.
Вот только одно не радует. Ну уж очень будет расти сама html-ка. Надо обязательно предусмотреть полный релоад через некоторый промежуток времени (минут 20 хотя бы: 3 релоада в час не сильно напрягут по трафику ИМХО, хотя можно и реже).
|
| | | | | |
Хм, да, извиняюсь, про такой ход забыл. 26.09.03 13:02
Автор: Ktirf <Æ Rusakov> Статус: Elderman
|
Но этот вариант не дает делать какие-либо настройки внешнего вида чата "на лету". Либо опять же перегружать фрейм.
|
| | | | | |
[Perl] Есть еще вот такая возможность.. 26.09.03 12:58
Автор: trent Статус: Незарегистрированный пользователь
|
делается фрейм нулевой геометрии, он каждый раз обновляется, в нем строится JS, который вставляет содержимое в видимый фрейм. Этот вариант гибче, т.к позволяет изменять порядок вывода сообщений(
например: снизу-вверх сверху-вниз).
|
| | | | | | |
[Perl] Эээ... 26.09.03 14:46
Автор: NKritsky <Nickolay A. Kritsky> Статус: Elderman
|
> делается фрейм нулевой геометрии, он каждый раз > обновляется, Стоп. Я так понял что наша цель это чатбезобновлений.
|
| | | | | | | |
[Perl] imho 26.09.03 18:56
Автор: hamstr Статус: Незарегистрированный пользователь
|
> Стоп. Я так понял что наша цель это чатбезобновлений. незакрывать соеденение конечно можно. получится что фрейм грузится бесконечно.
только что скажет хостер на такое количество одновременно открытых коннектов к серверу.
лично мне больше по душе вариант с 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
|
|
|
|