Чат на Yii

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Аватара пользователя
yuran80
Сообщения: 114
Зарегистрирован: 2010.03.21, 10:39
Откуда: Украина, Луцк
Контактная информация:

Чат на Yii

Сообщение yuran80 »

Здравствуйте профессионалы и новички. ;)
Есть необходимость реализовать чат на Yii. Что подскажите? Что почитать? Какую технологию использовать?


Аватара пользователя
yuran80
Сообщения: 114
Зарегистрирован: 2010.03.21, 10:39
Откуда: Украина, Луцк
Контактная информация:

Re: Чат на Yii

Сообщение yuran80 »

А как у long-polling с нагрузкой на сервер? На обычном хостинге проблем не будет?

Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Чат на Yii

Сообщение Svyatov »

Нагрузка будет. Чтобы минимизировать нагрузку, нужно юзать специализированные comet-сервера уже.

Например: http://habrahabr.ru/blogs/hi/79189/

Аватара пользователя
mitaichik
Сообщения: 512
Зарегистрирован: 2010.09.24, 21:18
Откуда: Россия, Санкт-Петербург

Re: Чат на Yii

Сообщение mitaichik »

С чатами не имел дела, но писал socket-сервер на php + Flex на клиенте. Socket сервер был запущен как демон на FreeBSD. Нагрузки на давольно слабый сервер почти не было (но там было всего порядка 70 подключений)

Аватара пользователя
yuran80
Сообщения: 114
Зарегистрирован: 2010.03.21, 10:39
Откуда: Украина, Луцк
Контактная информация:

Re: Чат на Yii

Сообщение yuran80 »

mitaichik писал(а):С чатами не имел дела, но писал socket-сервер на php + Flex на клиенте. Socket сервер был запущен как демон на FreeBSD. Нагрузки на давольно слабый сервер почти не было (но там было всего порядка 70 подключений)
Т.е. лучше всего для чата использовать socket-сервер? А как его с Yii связать?

Аватара пользователя
mitaichik
Сообщения: 512
Зарегистрирован: 2010.09.24, 21:18
Откуда: Россия, Санкт-Петербург

Re: Чат на Yii

Сообщение mitaichik »

Честно скажу, с чатами никогда не связывался, поэтому не имею представления как они работают. ИМХО, socet-сервер по любому будет экономичнее в плане загрузки системы, так как создается всего один процесс, который обрабатывает все входящие/исходящие события и действия. Чат, как мне представляется, создает процесс для каждого юзера (но это всего лишь мои представления, могу ошибаться).

Но я не слышал чтобы браузеры представляли возможность работы с сокетами. Flash, Java, ActiveX - их поддерживают, можно конечно ими воспользоваться...

А вообще, лучше почитать про comet-сервера, я одним глазком глянул - походу это то что надо.

AbS_
Сообщения: 207
Зарегистрирован: 2010.03.27, 14:02

Re: Чат на Yii

Сообщение AbS_ »

почитайте про Node.js
Браузеры поддерживаю так называемые Web socket, но не все. Есть эмуляция работы веб сокетов на флеш.

Аватара пользователя
yuran80
Сообщения: 114
Зарегистрирован: 2010.03.21, 10:39
Откуда: Украина, Луцк
Контактная информация:

Re: Чат на Yii

Сообщение yuran80 »

Спасибо за советы!
Скорее всего буду пробовать http://habrahabr.ru/blogs/hi/79189/ Comet-сервер

Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Чат на Yii

Сообщение Ekstazi »

Очень просто, ставишь скрытый фрейм в вэб страницу который указывает на скрипт msgs.php например.
Так вот этот скрипт выводит туда примерно следующее:
<script>top.m("user1","blabla");</script>
Где m - функция в самой странице которая добавляет сообщение. Но это еще не все. Пхп скрипт работает всего 10-15 секунд, после чего выводит:
<script>history.go(-1);</script>
Что перезагружает фрейм. Реализуется очень просто.

Далее. Если будет очень много пользователей, то можно будет написать свой однопоточный http сервер, который будет брать на себя функцию msgs.php за одним лишь исключением - он не будет каждые 10 сек перезагружать фрейм.
Такой принцип реалозован в большинстве чатов, например chat.php.spb.ru и phpchat( если не ошибаюсь с названием).

Я в свое время написал пару чатов, так что всю теорию хорошо знаю.
Пример: chat.beltsy.md и еще пару закрытых для мира.

Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Чат на Yii

Сообщение Svyatov »

А зачем городить iframe, если тоже самое чистым javacript делается?

Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Чат на Yii

Сообщение Ekstazi »

Потому что только iframe ом реализуется нормально работающий comet на сколько мне известно. Все остальные реализации некроссбраузерны и так далее.

Я делал и аяксом, 20-30 пользователь сервер выдержит, но под 90 - нет. 90-100 используя iframe сервер выдерживал. (Он просто не успевал обработать все запросы, сервер там был как мы называем пентиум 1) Потому что при аяксе каждую секунду приходится слать аякс запрос на проверку наличия новых сообщений. через iframe реализуется принцип comet - сервер сам дает нам знать когда появилось новое сообщение. Думаю разница очевидна.
Вот советую почитать:
http://javascript.ru/ajax/comet/polling
http://javascript.ru/ajax/comet/iframe
http://javascript.ru/ajax/comet/xmlhttp ... nteractive

Вот. Так ч что единственные кроссбраузерные способы это либо частый опрос либо iframe.

Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Чат на Yii

Сообщение Svyatov »

А, недопонял сначала, подумал, что это обычный поллинг, только через iframe :)

Вот кстати, тут все варианты разобраны: http://javascript.ru/ajax/comet

Бгг, спасибо, уже сам до этого докопался :)

Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Чат на Yii

Сообщение Ekstazi »

Я учился не по этим статьям, а по реальным проектам типа доработать чат, добавить функционала. Потом написать с нуля чат и так пошло поехало, но это было года 3 назад. С тех пор мало что изменилось как вижу, хотя тема и не на столько актуальна уже.

Аватара пользователя
Svyatov
Сообщения: 459
Зарегистрирован: 2010.08.12, 14:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Чат на Yii

Сообщение Svyatov »

Тема на самом деле актуальная, не зря же WebSockets придумали и развивают. Просто применение теперь не банальные чаты, а повышенная интерактивность. Применений масса, начиная от банальных различных уведомлений.

AbS_
Сообщения: 207
Зарегистрирован: 2010.03.27, 14:02

Re: Чат на Yii

Сообщение AbS_ »

WebSocket сейчас на распутье.

Аватара пользователя
yuran80
Сообщения: 114
Зарегистрирован: 2010.03.21, 10:39
Откуда: Украина, Луцк
Контактная информация:

Re: Чат на Yii

Сообщение yuran80 »

Так что использовать то мне. Comet-сервер стоит изучать?
На сколько я понял - это оптимальный вариант?
P.S. Рассчитываю нагрузку не более 50 одновременных подключений.

Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: Чат на Yii

Сообщение Ekstazi »

Вот что я нашел из интересного:
http://habrahabr.ru/blogs/webdev/104945/
http://habrahabr.ru/blogs/hi/79189/
http://www.xakep.ru/post/52189/default.asp
http://habrahabr.ru/blogs/webdev/76144/#habracut

Но для 50 одновременных коннектов отдельный комет сервер не нужен, можно обойтись простым скриптом. Почитайте про технологию long poll

Dr0ID
Сообщения: 27
Зарегистрирован: 2010.04.04, 20:02
Откуда: Новосибирск
Контактная информация:

Re: Чат на Yii

Сообщение Dr0ID »

Юзаем realplexor — очень нравится.

AbS_
Сообщения: 207
Зарегистрирован: 2010.03.27, 14:02

Re: Чат на Yii

Сообщение AbS_ »

А можно вообще: http://socket.io/
для nodejs

Там уже из корбки идет поддержка:
* WebSocket
* Adobe® Flash® Socket
* AJAX long polling
* AJAX multipart streaming
* Forever Iframe
* JSONP Polling
Останется только:

Код: Выделить всё

 var socket = new io.Socket({node_server_url}); 
 socket.on('connect', function(){ … }) 
 socket.on('message', function(){ … }) 
 socket.on('disconnect', function(){ … })  

Ответить