[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PHP + AJAX обновления инфы
icedfox
Ребят, встал перед делемой как лучше, и лучше ли.....
Итак. Имеем обычный сайт на PHP , HTML, JS и прочие стандартные вещи.
Есть авторизованный юзер, для которого на всех страницах сайта выводится информация, для примера пусть будет : Персональные сообщения (ПС).
Задача
Юзер должен получать уведомления о новых без перезагрузки страницы.
Решение
Отправлять по таймеру AJAX запрос к серверу

Все бы хорошо. Но есть несколько НО:
1. А если юзеров он-лайне 500 чел ?
2. Таких видов уведомлений десяток ?

Как я себе вижу решение
1. Создаем в базе таблицу евентов , в которой есть поля: userID, type
2. AJAX запрос идет по таймеру к этой таблице и ищет по ID юзера новые события из поля type
3. Если есть, то по полю type определяет тип изменившейся информации и тогда ее уже запрашивает
4. Полученная инфа в DOM меняется новую.

Готов принять любые дельные советы и предложения дабы оптимизировать данную схему.

П.С. На вопрос, а почему сразу не запросить нужную информацию отвечу, что выборка происходит джойном с нескольких таблиц и плюсом еще две таблицы отдельно. Не везде конечно, но в одном случае именно так.
AllesKlar
Если задача носит не теоретический характер, а где-то на реальном боевом ресурсе, то я бы пока оставил просто аякс запрос, секунд 20-30, вполне достаточно для обычной "Привет, как дела".
А вот когда настанет тот счастливый момент, когда
Цитата
А если юзеров он-лайне 500 чел

тогда уже какой-нидь comet прикрутил

_____________
[продано копирайтерам]
FatCat
Можно оптимизировать. Например, добавить таблицу на 2 поля: айдишник юзера по инкременту и есть/нет оповещения.
Таким образом, большинство юзеров, у которых нет оповещений, будут создавать самую минимальную нагрузку.

_____________
Бесплатному сыру в дырки не заглядывают...
icedfox
Сейчас пишется под боевой ресурс. Начальный поток трафа примерно известен, это Ж аудитория 200-500 чел в сутки примерно. Это будет в первый месяц. дальше уже будет зависеть от качества сервиса и продвижения его.
Думаю догадаться не трудно, как Ж аудитория любит треп, и с этим придется мириться и поощрять , т.к. это побочный эффект от составляющей профита.

Поэтому хочу предусмотреть заранее эту проблему. ибо когда она встанет, придется лепить быстро, а не в развалочку с проверкой кода. wink.gif
Цитата (AllesKlar @ 28.11.2015 - 22:20)
тогда уже какой-нидь comet прикрутил

Если не сложно. то подробнее плиз.

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

Пару лет назад имел опыт работы с 30к дам в сутки, тогда можно было с этого выжать максимум 10к рублей за день, но очень скоро наши Дамы стали умнее и доход упал до 3к в день. К текущей ситуации это отношения не имеет, тут совсем другое. Написал просто для понимания, что такое Ж аудитория.
sergeiss
Цитата (icedfox @ 28.11.2015 - 20:12)
Есть авторизованный юзер, для которого на всех страницах сайта выводится информация, для примера пусть будет : Персональные сообщения (ПС).

В связи с этой фразой вопрос: ты продумывал, как обновлять одну и ту же инфу на разных, одновременно открытых страницах, чтобы минимизировать трафик? То есть, попросту говоря, чтобы не спрашивать у сервера одно и то же с разных страниц.
Если не задумывался, то подскажу, как это можно решить.

Цитата (icedfox @ 28.11.2015 - 20:12)
2. Таких видов уведомлений десяток ?

Группировать разные уведомления, чтобы они одним запросом-ответом уходили.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
icedfox
Цитата (sergeiss @ 28.11.2015 - 23:35)
Группировать разные уведомления, чтобы они одним запросом-ответом уходили.

В целом так и предполагалось, массивом ответ от сервера, а на стороне клиента разбор массива JSом.
Вот сейчас гуглю практичность использования длинных запросов, вместо частых мелких, здесь у меня небольшие сомнения.
Например ситуация.
1. Сидит юзер и чатится.
2. При коротких запросах, пусть их будет 1 запрос на юзера в 15 сек.
3. При длинных ведь будет практически аналогично, ответ от сервера получен и тут же уходит новый запрос, ждать ответа.

В обоих вариантах сервер тратит ресурсы на получение, обработку и отправку запроса равные. (с совсем небольшой разницей)
Только с длинными запросами на сервер будут висеть процессы ожидающие ответа, постоянно и занимающие память. Например запрос кушает 120кб памяти, умножаем на предположительные 200 человек и получаем 24мб .
Правда опыт подсказывает, что висящие в памяти процессы кушают куда более, 10-70 мб минимум, т.е. в реале 14 гиг оперативки на это уйдет при совсем небольшой посещалке .

Могу ошибаться, ибо не уверен в своих выводах, сижу в гугле пока smile.gif
icedfox
Santehnick, благодарю вас. Немного опустили меня на землю, т.к. действительно все заранее просчитать сложно, и может действительно решать проблемы по мере их поступления biggrin.gif
inpost
icedfox
1) 500 - копейки.
2) Уведомления все в один скрипт запихни, а не 10 отдельных запросов. Хватит с головой.

Взял VDS на 512 мб памяти, поставил socket.io на базе node.js (скажу так, чистый node.js на лонг пулинг в 3-4 раза эффективнее веб-соккетов), запустил обновление контента каждые 4 секунды, спокойно выдержал аудиторию в полторы тысячи одновременных посетителей, там что-то вроде 10-15% памяти сожрал, а ведь это было на старой версии.

На одном сайте сделан чат на AJAX и при должной оптимизации чат - самое последнее, что я буду оптимизировать в ближайшее время.

В общем, запускай, потом внимательно следи за узкими местами, не забудь логировать скорость выполнения страниц, выводи безиндексные запросы, долгие запросы к мускулу, таким образом ты сможешь быстро создать нужный тебе функционал, а потом уже его дорабатывать и работать с узкими местами.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
icedfox
inpost, благодарю за подсказку.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.