Чат на Yii
- yuran80
- Сообщения: 114
- Зарегистрирован: 2010.03.21, 10:39
- Откуда: Украина, Луцк
- Контактная информация:
Чат на Yii
Здравствуйте профессионалы и новички.
Есть необходимость реализовать чат на Yii. Что подскажите? Что почитать? Какую технологию использовать?
Есть необходимость реализовать чат на Yii. Что подскажите? Что почитать? Какую технологию использовать?
- yuran80
- Сообщения: 114
- Зарегистрирован: 2010.03.21, 10:39
- Откуда: Украина, Луцк
- Контактная информация:
Re: Чат на Yii
А как у long-polling с нагрузкой на сервер? На обычном хостинге проблем не будет?
- Svyatov
- Сообщения: 459
- Зарегистрирован: 2010.08.12, 14:50
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Чат на Yii
Нагрузка будет. Чтобы минимизировать нагрузку, нужно юзать специализированные comet-сервера уже.
Например: http://habrahabr.ru/blogs/hi/79189/
Например: http://habrahabr.ru/blogs/hi/79189/
Re: Чат на Yii
С чатами не имел дела, но писал socket-сервер на php + Flex на клиенте. Socket сервер был запущен как демон на FreeBSD. Нагрузки на давольно слабый сервер почти не было (но там было всего порядка 70 подключений)
- yuran80
- Сообщения: 114
- Зарегистрирован: 2010.03.21, 10:39
- Откуда: Украина, Луцк
- Контактная информация:
Re: Чат на Yii
Т.е. лучше всего для чата использовать socket-сервер? А как его с Yii связать?mitaichik писал(а):С чатами не имел дела, но писал socket-сервер на php + Flex на клиенте. Socket сервер был запущен как демон на FreeBSD. Нагрузки на давольно слабый сервер почти не было (но там было всего порядка 70 подключений)
Re: Чат на Yii
Честно скажу, с чатами никогда не связывался, поэтому не имею представления как они работают. ИМХО, socet-сервер по любому будет экономичнее в плане загрузки системы, так как создается всего один процесс, который обрабатывает все входящие/исходящие события и действия. Чат, как мне представляется, создает процесс для каждого юзера (но это всего лишь мои представления, могу ошибаться).
Но я не слышал чтобы браузеры представляли возможность работы с сокетами. Flash, Java, ActiveX - их поддерживают, можно конечно ими воспользоваться...
А вообще, лучше почитать про comet-сервера, я одним глазком глянул - походу это то что надо.
Но я не слышал чтобы браузеры представляли возможность работы с сокетами. Flash, Java, ActiveX - их поддерживают, можно конечно ими воспользоваться...
А вообще, лучше почитать про comet-сервера, я одним глазком глянул - походу это то что надо.
Re: Чат на Yii
почитайте про Node.js
Браузеры поддерживаю так называемые Web socket, но не все. Есть эмуляция работы веб сокетов на флеш.
Браузеры поддерживаю так называемые Web socket, но не все. Есть эмуляция работы веб сокетов на флеш.
- yuran80
- Сообщения: 114
- Зарегистрирован: 2010.03.21, 10:39
- Откуда: Украина, Луцк
- Контактная информация:
Re: Чат на Yii
Спасибо за советы!
Скорее всего буду пробовать http://habrahabr.ru/blogs/hi/79189/ Comet-сервер
Скорее всего буду пробовать http://habrahabr.ru/blogs/hi/79189/ Comet-сервер
-
- Сообщения: 1428
- Зарегистрирован: 2009.08.20, 22:54
- Откуда: Молдова, Бельцы
- Контактная информация:
Re: Чат на Yii
Очень просто, ставишь скрытый фрейм в вэб страницу который указывает на скрипт 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 и еще пару закрытых для мира.
Так вот этот скрипт выводит туда примерно следующее:
<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
А зачем городить iframe, если тоже самое чистым javacript делается?
-
- Сообщения: 1428
- Зарегистрирован: 2009.08.20, 22:54
- Откуда: Молдова, Бельцы
- Контактная информация:
Re: Чат на Yii
Потому что только 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.
Я делал и аяксом, 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
А, недопонял сначала, подумал, что это обычный поллинг, только через iframe
Вот кстати, тут все варианты разобраны: http://javascript.ru/ajax/comet
Бгг, спасибо, уже сам до этого докопался
Вот кстати, тут все варианты разобраны: http://javascript.ru/ajax/comet
Бгг, спасибо, уже сам до этого докопался
-
- Сообщения: 1428
- Зарегистрирован: 2009.08.20, 22:54
- Откуда: Молдова, Бельцы
- Контактная информация:
Re: Чат на Yii
Я учился не по этим статьям, а по реальным проектам типа доработать чат, добавить функционала. Потом написать с нуля чат и так пошло поехало, но это было года 3 назад. С тех пор мало что изменилось как вижу, хотя тема и не на столько актуальна уже.
- Svyatov
- Сообщения: 459
- Зарегистрирован: 2010.08.12, 14:50
- Откуда: Санкт-Петербург
- Контактная информация:
Re: Чат на Yii
Тема на самом деле актуальная, не зря же WebSockets придумали и развивают. Просто применение теперь не банальные чаты, а повышенная интерактивность. Применений масса, начиная от банальных различных уведомлений.
Re: Чат на Yii
WebSocket сейчас на распутье.
- yuran80
- Сообщения: 114
- Зарегистрирован: 2010.03.21, 10:39
- Откуда: Украина, Луцк
- Контактная информация:
Re: Чат на Yii
Так что использовать то мне. Comet-сервер стоит изучать?
На сколько я понял - это оптимальный вариант?
P.S. Рассчитываю нагрузку не более 50 одновременных подключений.
На сколько я понял - это оптимальный вариант?
P.S. Рассчитываю нагрузку не более 50 одновременных подключений.
-
- Сообщения: 1428
- Зарегистрирован: 2009.08.20, 22:54
- Откуда: Молдова, Бельцы
- Контактная информация:
Re: Чат на Yii
Вот что я нашел из интересного:
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
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
Re: Чат на Yii
А можно вообще: http://socket.io/
для nodejs
Там уже из корбки идет поддержка:
для 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(){ … })