![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Yelodia |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 14.12.2009 Репутация: нет Всего: нет |
Доброе время суток, программисты. Подскажите, пожалуйста, принципы создания быстрого чата, с минимальной нагрузкой на сервер. Кроме того, что для обновления окна чата должен использоваться ajax, я ничего не знаю. Рационально ли использовать базу данных? Где будет уместно использовать php-сценарии, а где нет? Каким образом нужно организовать чат-комнаты? Предполагается, что чатом будет пользоваться большое количество пользователей, как обеспечить эффективную его работу?
Читала вот эту статью, http://forum.vingrad.ru/topic-275760.html , но ее очень уж раскритиковали. Или может быть, как вариант, подскажете готовый голый движок, удовлетворяющий требованиям производительности, который можно было бы просто дополнить дополнительными функциями? |
|||
|
||||
anjo |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 23.2.2011 Репутация: нет Всего: нет |
Вот готовый, очень хороший чат.
http://www.phpfreechat.net/ Скачать сразу тут Это сообщение отредактировал(а) anjo - 25.2.2011, 20:29 |
|||
|
||||
Yelodia |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 14.12.2009 Репутация: нет Всего: нет |
В том-то и дело, на сайте в данный момент установлен именно этот чат. И он очень тормозит, ресурсы жрет. Поэтому надо или этот оптимизировать, или с нуля написать. Вот я и спрашиваю, как правильно должен быть организован чат |
|||
|
||||
Muerto |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
Чат оч простая вещь, можно в простой текстовый файл писать.
никакой ajax не нужен тоже, можно обойтись простым iframe Там организововать нечего... берешь и пишешь строку в файл, затем выводишь на экран |
|||
|
||||
Yelodia |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 14.12.2009 Репутация: нет Всего: нет |
оно и понятно, что написать чат просто. Минимизировать нагрузку на сервер непросто. В чем, собственно, и состоит вопрос.
|
|||
|
||||
Muerto |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
Yelodia, А скок пользователей в чате? мой вариант до 100 чел одновременно норм будет имхо...
Дальше лучше в базе хранить. до 1000 онлайн в чате норма. на сервере за 10 долларов в месяц будет 50% нагрузка может. ![]() Вопрос в том скок народу в чате сидит ... У вас наверно сервер ВДС дохлый или проект очень крупный Это сообщение отредактировал(а) Muerto - 27.2.2011, 00:22 |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
очень сомневаюсь что это лучший вариант
![]() а по сути... Любой Чат это всегда нагрузка на сервер ![]() Можно создать или файлик или таблицу дополнительную, в которой будет содержаться ID последнего сообщения. Постоянно обращаться к основной таблице сообщений наверное не совсем рационально. А тут с клиента приходит ID последнего сообщения, если не менялось, то обратно, если изменилось, то уже получаем сообщения Ещё передавать через протокол коды смайлов а не картинки.. коды обрабатывать уже на клиенте. Ещё можно автоматически регулировать обновление, брать из расчёта среднее количество сообщений за определённый последний период -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
Yelodia |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 14.12.2009 Репутация: нет Всего: нет |
Muerto, да, проект большой. А phpfreechat даже с 10 человеками сервер грузит, что уж о сотне говорить.
Gold Dragon, понимаю, что без ajax никак. Будем пробовать. |
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
подключай JQuery и что за непонятный монстр Ajax забудешь. Всё очень понятно и красиво и в плане работы с сервером и в плане "красивости"
Добавлено через 49 секунд
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
Dima 2015 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
gcc |
|
||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: -1 Всего: 17 |
можно POLLING
можно аякс http://blog.elfet.ru/jquery/php-ajax-chat/ Добавлено @ 14:14
ИМХО, ставишь:
а все остальное делаешь как хочешь... Это сообщение отредактировал(а) gcc - 27.2.2011, 14:18 |
||||
|
|||||
Yelodia |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 14.12.2009 Репутация: нет Всего: нет |
Dima 2015, если производительность web чата такая уж серьезная проблема, то что вы можете сказать о Web гейтах для irc? Если чат запустить на irc сервере, то веб сервер освобождается от большой нагрузки?
|
|||
|
||||
Dima 2015 |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 287 Регистрация: 16.3.2008 Где: SPb Репутация: 2 Всего: 2 |
Понятия не имею что такое "Web гейтах для irc", так что сказать не могу ничего
![]() |
|||
|
||||
Opik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: 24 Всего: 55 |
Ajax для этих целей вовсе не обязателен. Самый простой способ писать в базу, а тип таблицы делать Memory. Издержки минимальны. Если нужен большой онлайн и минимальная задержка только одним PHP будет уже сложно обойтись.Дл этих целей я в свое время писал демона на Java. Все летало и до сих пор летает
![]() |
|||
|
||||
Yelodia |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 14.12.2009 Репутация: нет Всего: нет |
Opik, не знаю Java...
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |