Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Быстрый и функциональный чат, рациональные способы создания чата 
:(
    Опции темы
Yelodia
Дата 24.2.2011, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 14.12.2009

Репутация: нет
Всего: нет



Доброе время суток, программисты. Подскажите, пожалуйста, принципы создания быстрого чата, с минимальной нагрузкой на сервер. Кроме того, что для обновления окна чата должен использоваться ajax, я ничего не знаю. Рационально  ли использовать базу данных? Где будет уместно использовать php-сценарии, а где нет? Каким образом нужно организовать чат-комнаты? Предполагается, что чатом будет пользоваться большое количество пользователей, как обеспечить эффективную его работу?
Читала вот эту статью, http://forum.vingrad.ru/topic-275760.html , но ее очень уж раскритиковали. Или может быть, как вариант, подскажете готовый голый движок, удовлетворяющий требованиям производительности, который можно было бы просто дополнить дополнительными функциями? 
PM MAIL ICQ   Вверх
anjo
Дата 25.2.2011, 20:26 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 23.2.2011

Репутация: нет
Всего: нет



Вот готовый, очень хороший чат.
http://www.phpfreechat.net/

Скачать сразу тут

Это сообщение отредактировал(а) anjo - 25.2.2011, 20:29
PM MAIL   Вверх
Yelodia
Дата 26.2.2011, 15:56 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 14.12.2009

Репутация: нет
Всего: нет



Цитата

Вот готовый, очень хороший чат.
http://www.phpfreechat.net/

В том-то и дело, на сайте в данный момент установлен именно этот чат. И он очень тормозит, ресурсы жрет. Поэтому надо или этот оптимизировать, или с нуля написать. Вот я и спрашиваю, как правильно должен быть организован чат
PM MAIL ICQ   Вверх
Muerto
Дата 26.2.2011, 16:26 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: 3
Всего: 4



Чат оч простая вещь, можно в простой текстовый файл писать.
никакой ajax не нужен тоже, можно обойтись простым iframe

Там организововать нечего...
берешь и пишешь строку в файл, затем выводишь на экран


--------------------
user posted image
PM MAIL   Вверх
Yelodia
Дата 26.2.2011, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 14.12.2009

Репутация: нет
Всего: нет



оно и понятно, что написать чат просто. Минимизировать нагрузку на сервер непросто. В чем, собственно, и состоит вопрос. 
PM MAIL ICQ   Вверх
Muerto
Дата 27.2.2011, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: 3
Всего: 4



Yelodia, А скок пользователей в чате? мой вариант до 100 чел одновременно норм будет имхо...
Дальше лучше в базе хранить.
до 1000 онлайн в чате норма. на сервере за 10 долларов в месяц будет 50% нагрузка может.  smile 

Вопрос в том скок народу в чате сидит ...

У вас наверно сервер ВДС дохлый или проект очень крупный


Это сообщение отредактировал(а) Muerto - 27.2.2011, 00:22


--------------------
user posted image
PM MAIL   Вверх
Gold Dragon
Дата 27.2.2011, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Цитата(Muerto @  26.2.2011,  17:26 Найти цитируемый пост)
никакой ajax не нужен тоже, можно обойтись простым iframe
очень сомневаюсь что это лучший вариант smile

а по сути... Любой Чат это всегда нагрузка на сервер smile Нужен сервер хороший

Можно создать или файлик или таблицу дополнительную, в которой будет содержаться ID последнего сообщения. Постоянно обращаться к основной таблице сообщений наверное не совсем рационально. А тут с клиента приходит ID последнего сообщения, если не менялось, то обратно, если изменилось, то уже получаем сообщения

Ещё передавать через протокол коды смайлов а не картинки.. коды обрабатывать уже на клиенте. 

Ещё можно автоматически регулировать обновление, брать из расчёта среднее количество сообщений за определённый последний период



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Yelodia
Дата 27.2.2011, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 14.12.2009

Репутация: нет
Всего: нет



Muerto,  да, проект большой. А phpfreechat даже с 10 человеками сервер грузит, что уж о сотне говорить. 
Gold Dragon, понимаю, что без ajax никак. Будем пробовать.
PM MAIL ICQ   Вверх
Gold Dragon
Дата 27.2.2011, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Цитата(Yelodia @  27.2.2011,  09:54 Найти цитируемый пост)
Gold Dragon, понимаю, что без ajax никак. Будем пробовать. 
подключай JQuery и что за непонятный монстр Ajax забудешь. Всё очень понятно и красиво и в плане работы с сервером и в плане "красивости"

Добавлено через 49 секунд
Цитата(Yelodia @  27.2.2011,  09:54 Найти цитируемый пост)
да, проект большой. А phpfreechat даже с 10 человеками сервер грузит
пиши свой проект с нуля... 



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Dima 2015
Дата 27.2.2011, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 16.3.2008
Где: SPb

Репутация: 2
Всего: 2



Цитата

Чат оч простая вещь, можно в простой текстовый файл писать.

Не хочу показаться невоспитанным, но это не так. Очень очень сильно не так. Чат как раз ахрененно сложная вещь, а нагруженный чат это мегоахрененно сложная вещь. Скажем так, сделать нечто, что будет работать на 10 одновременно сидящих юзерах можно как угодно. В файлике, в базе, аяксом, в ифрейме... один фиг.
Но как только оно начинает расти, даже 40-50 одновременно сидящих юзеров, это уже становится проблемой. Понятно, что все еще от железа зависит. Ну пусть мы говорим о какой-нибудь средней вдс-ке с 1024 мб оперативки, я сам на такой живу.  Вообще невозможно так просто ответить на вопрос о чате.
Постараюсь набросать самое основное...

1. Где хранить - однозначно в памяти, если нужно вечное хистори - скидывать в базу в фоне с некоторым интервалом, как правило вечное хистори не нужно для чата.
2. Как опрашивать сервер и как серверу отвечать, и самое главное что должен быть за сервер. Это собственно самое сложное, ибо... что такое чат? Это моментальное или псевдо-моментальное обновление инфы. А значит нам надо сервер опрашивать очень очень часто или держать с ним вообще постоянный коннект, тут мы и приходим к 2м принципиально разным подходам.
Есть так называемый POLLING. На Хабре или в Гугле вобьете и узнаете что это, я могу напутать в терминологии, сам не делал. Суть такова - либо мы стучимся к серверу постоянно, тем же аяксом и он нам собирает новые сообщения. Либо мы ставим постоянный коннект ( это кстати возможно только на флеше, джаве или хтмл-сокетах, которые нигде почти не пашут :Р, а еще есть эмуляция - подвисшие HTTP запросы, так работает IM у ВКонтакта по ходу дела ) и ловим ответ от сервера.
3. Сервер чата. Это тоже сложный вопрос, самый печальный вариант это рнр скрипт который крутится на апаче и апачем отдается. Т.к. запросов будет много (скажем 100 юзеров и каждый раз в секунду спрашивает) - это создаст кучу процессов апача. Во-первых у апача сами процессы тяжелые, по 20 мб памяти каждый. Во-вторых их число как правило ограничено. Короче это печальный вариант. Более оптимистичный вариант это nginx перед апачем, но Nginx сам не умеет данные собирать. Нужен кто-то, кто будет ему эти сообщения чата отдавать. Это опять таки может быть либо рнр с апачем, либо свой собственный чат-демон. Самые понтовые проекты делают именно так.

Короче, автору советую, если вопрос стоит серьезный курить эту тему серьезно. Читать эм... ну начать можно с Хабра, хотя и он не панацея. Но тут вряд ли кто-то подскажет, я думаю местные гуру могут сильно раскритиковать мой пост, но им явно лень этим заниматься, судя по всему они уже зашли в тему и поняли "это нереал тут помочь".

Это сообщение отредактировал(а) Dima 2015 - 27.2.2011, 13:47
PM MAIL ICQ   Вверх
gcc
Дата 27.2.2011, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: -1
Всего: 17



можно POLLING 
  • push server, long-pull, aka Comet (есть решение jQuery)
  • websockets 
  • etc
http://www.x0.org.ua/blog/user/1/view/7

можно аякс 
http://blog.elfet.ru/jquery/php-ajax-chat/

Добавлено @ 14:14
Цитата(Yelodia @ 24.2.2011,  18:55)

Читала вот эту статью, http://forum.vingrad.ru/topic-275760.html , но ее очень уж раскритиковали.

ИМХО, ставишь:
Код

setInterval("Load();", 2000);


а все остальное делаешь как хочешь...

Это сообщение отредактировал(а) gcc - 27.2.2011, 14:18
PM WWW ICQ Skype GTalk Jabber   Вверх
Yelodia
Дата 27.2.2011, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 14.12.2009

Репутация: нет
Всего: нет



Dima 2015, если производительность web чата такая уж серьезная проблема, то что вы можете сказать о Web гейтах для irc? Если чат запустить на irc сервере, то веб сервер  освобождается от большой нагрузки?
PM MAIL ICQ   Вверх
Dima 2015
Дата 27.2.2011, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 287
Регистрация: 16.3.2008
Где: SPb

Репутация: 2
Всего: 2



Понятия не имею что такое "Web гейтах для irc", так что сказать не могу ничего smile
PM MAIL ICQ   Вверх
Opik
Дата 27.2.2011, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Vingrad developer
Сообщений: 1918
Регистрация: 6.10.2004
Где: Рига

Репутация: 24
Всего: 55



Ajax для этих целей вовсе не обязателен. Самый простой способ писать в базу, а тип таблицы делать Memory. Издержки минимальны. Если нужен большой онлайн и минимальная задержка только одним PHP будет уже сложно обойтись.Дл этих целей я в свое время писал демона на Java. Все летало и до сих пор летает smile
PM MAIL Skype   Вверх
Yelodia
Дата 27.2.2011, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 14.12.2009

Репутация: нет
Всего: нет



Opik, не знаю Java... 
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1108 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.