![]() |
Модераторы: 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...
|
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
Ajax нужен для передачи чистых данных от клиента серверу и обратно без лишней перезагрузки страниц у клиента и без передачи лишнего мусора. Плюс ко всему Ajax нужен и для динамического изменения содержимого на странице... А уж что делать на сервере вопрос из другой области
![]() ps Ajax я имею в виду уже готовые библиотеки типа JQuery и им подобным -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
Yelodia |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 14.12.2009 Репутация: нет Всего: нет |
Ajax, ясное дело, используется на клиентской стороне, для удобства пользователей. А вот для серверной стороны, видимо, демон для чата решит проблему, ибо ИМХО веб-гейт для irc это изврат. Но тут уж новая головная боль - искать готовый демон, ибо сама не напишу.
|
|||
|
||||
Muerto |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
Opik, а можно подробней про демоны Java, что имеется ввиду? Java знаю...
|
|||
|
||||
Yelodia |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 14.12.2009 Репутация: нет Всего: нет |
А хотя, чат phpfreechat тоже использует демона, написанного на пхп? Или я ошибаюсь?
|
|||
|
||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
-------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
Yelodia |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 14.12.2009 Репутация: нет Всего: нет |
Демон - чат-сервер, процесс будет работать постоянно с момента запуска и принимать и обрабатывать команды... Только вот, как это релизовать на Java, а потом обеспечить взаимодействие его с php..
![]() Это сообщение отредактировал(а) Yelodia - 28.2.2011, 09:04 |
|||
|
||||
gcc |
|
||||||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: -1 Всего: 17 |
это программа которая работаает в фоновом режиме, например, сокет сервер, висит и принимает все время, может переключать свои сессионные данные, работать безконечно на unix можно в фоне запустить
apache - это демон, называется httpd ВОТ: http://www.google.com.ua/#hl=ru&source...6775f3157f7cf40 Это сообщение отредактировал(а) gcc - 1.3.2011, 16:42 |
||||||
|
|||||||
Gold Dragon |
|
|||
![]() Призрачный ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 6753 Регистрация: 1.3.2004 Где: Россия, Тамбов Репутация: 10 Всего: 71 |
а вообще, чат - это зло
![]() -------------------- Нельзя жить в прошлом, оно уже прошло. Нельзя жить в будущем, оно ещё не наступило. Нужно жить в настоящем, помня прошлое и думая о будущем! |
|||
|
||||
Muerto |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1207 Регистрация: 23.9.2006 Репутация: 3 Всего: 4 |
gcc, А плюсы какие ?
Когда есть eAccelerator скрипт не компилируется каждый раз... и то что ты написал часть на Java - в чем выгода? |
|||
|
||||
Yelodia |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 14.12.2009 Репутация: нет Всего: нет |
||||
|
||||
gcc |
|
|||
![]() Агент алкомафии ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2691 Регистрация: 25.4.2008 Где: %&й Репутация: -1 Всего: 17 |
я про Java не писал, что "выгода" php будет запускатся один раз при старте демона, т.е. mod_php будет только при старте запускать php (!!хотя там хитро сделано...) а в CGI интерпретатор php будет все время перезапускатся, вот apache работат как демон и держит у себя php (в режиме mod_php) Добавлено @ 23:08 для нагруженного чата один из лучших вариантов описали тут http://forum.vingrad.ru/index.php?showtopi...t&p=2306383 Это сообщение отредактировал(а) gcc - 8.3.2011, 23:13 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |