|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Arkhipov Dmitriy 2:5020/400 26 Oct 2001 12:43:26 To : Dmitriy Pushkarev Subject : Re: Chat -------------------------------------------------------------------------------- День добрый, Dmitriy Pushkarev! DP> s> Видел тут на http://chat.talk.ru чат, возник вопрос как он сделан? То DP> s> есть как только посылаешь сообщение оно тут же появляется на экране. DP> s> Это не Ява. Вопрос такой, а как можно на перле реализовать подобный DP> s> механизм? Может через сокеты? Или это не правильно? Вообще есть DP> s> какие-то способы организовать чат на перле ( или неперле ) кроме как DP> s> банальных ? DP> Используется, так называемый непрерывный html. Т.е. всю сессию пользователь DP> укачивает один файл. А сервер всю сессию его отдает, и как получает новое DP> сообщение во все передаточные сокеты дописывает мессагу. DP> Более научное название Server-Push. Точнее поточный HTML. В книжке "PHP4 Разработка Web-приложений" мельком упоминается: ...Эта технология никем не поддерживается официально, но тем не менее прекрасно работает. Сценарий интерфейсного вывода находится в ожидании в бесконечном цикле и не заканчивает передачу HTML-страницы, которую получает броузер. Информация, которую надо послать пользователю, выводится на экран и немедленно удаляется из буфера сервера. Таким образом, броузер при этом постоянно работает на вывод обновляемой информации и всегда выводит самые последние данные. Однако такой подход влечет за собой одну проблему ч сложные объекты HTML при этом невозможно интерпретировать в процессе работы, Ина летуК. Hапример, строки таблицы нельзя выводить по одной, потому что броузер должен получить все строки и столбцы таблицы, чтобы определить ее окончательный размер. Все хорошо работает, пока вы ограничиваетесь последовательным выводом текстовых строк и используете таблицы, которые можно вывести на экран сразу. Поточный HTML обладает одним свойством, которое можно считать и достоинством, и недостатком: поскольку соединение с клиентом остается открытым, постоянно должен существовать процесс сервера, который его обрабатывает. Это означает, что каждый клиент требует, чтобы, по крайней мере, один процесс сервера работал только с ним. Преимущество такого подхода заключается в том, что не нужно поддерживать никаких данных, связанных с конкретным обращением, то есть сеансом работы пользователя с данной страницей. Обычно, когда клиент запрашивает документ, должен порождаться новый процесс; необходимо загрузить, проанализировать и выполнить сценарий, генерирующий документ. Поскольку при использовании поточного HTML процесс сервера постоянно остается в памяти, загрузка сценария и его интерпретация должны осуществляться для каждого клиента только один раз. Для сайтов, которые в противном случае обрабатывали бы сотни обращений в секунду, это несомненное преимущество. Однако при этом каждый процесс остается в памяти резидентным и ему требуется оперативная память... А реализуется на PHP это гораздо проще :) Hапример так: for ($i=0;$i<=100;$i++) { echo "Line $i<br>\n"; flush(); sleep(5); } С уважением, Архипов Дмитрий. -- Отправлено через сервер Talk.Ru - http://www.talk.ru --- ifmail v.2.15dev5 * Origin: State Marine Technical University of St. Petersburg - w (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/214834c20fdd.html, оценка из 5, голосов 10
|