Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> PHP + AJAX обновления инфы
icedfox  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 395
Пользователь №: 41702
На форуме: 1 год, 3 месяца, 26 дней
Карма: 13




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

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

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

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

П.С. На вопрос, а почему сразу не запросить нужную информацию отвечу, что выборка происходит джойном с нескольких таблиц и плюсом еще две таблицы отдельно. Не везде конечно, но в одном случае именно так.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3376
Пользователь №: 38635
На форуме: 2 года, 11 месяцев, 12 дней
Карма: 170




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

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


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Santehnick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 231
Пользователь №: 26735
На форуме: 5 лет, 9 месяцев, 1 день
Карма: 15




Нормальное у тебя решение. За онлайн не переживай http легко масштабируется. Если узким местом станет php приложение, то поднимешь несколько копий на разных серверах, через веб сервер настроишь проксирование на эти бекенды. Если узким местом станет база, сделаешь реплики или перенесешь хранение событий из базы в специализированные решения (rabbitMQ и т.д.), которые тоже умеют хорошо масштабироваться.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
FatCat  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Чеширский кот
******

Профиль
Журнал
Группа: Администратор
Почтальон группы
Сообщений: 5911
Пользователь №: 1
На форуме: 10 лет, 10 месяцев, 2 дня
Карма: 125

Не пью :
22 года, 3 месяца, 2 дня


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


--------------------
Бесплатному сыру в дырки не заглядывают...
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
icedfox  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 395
Пользователь №: 41702
На форуме: 1 год, 3 месяца, 26 дней
Карма: 13




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

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

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

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

Пару лет назад имел опыт работы с 30к дам в сутки, тогда можно было с этого выжать максимум 10к рублей за день, но очень скоро наши Дамы стали умнее и доход упал до 3к в день. К текущей ситуации это отношения не имеет, тут совсем другое. Написал просто для понимания, что такое Ж аудитория.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Santehnick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 231
Пользователь №: 26735
На форуме: 5 лет, 9 месяцев, 1 день
Карма: 15




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

Long polling, http streaming и т.д. Long polling это долгий запрос, который бродит по бекенду в надежде получить новые данные, как только данные получены, запрос закрывается (если не получены закрывается по таймауту). Http streaming это тоже долгий запрос, но пока он открыт он сыпет данные на клиент, но при этом не закрывается, закрывается он по таймауту самим клиентом.
PM
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
sergeiss  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Сидел он, дум великих полон - и вдаль глядел
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 14978
Пользователь №: 4190
На форуме: 8 лет, 10 месяцев, 3 дня
Карма: 444




Цитата (icedfox @ 28.11.2015 - 20:12)
Есть авторизованный юзер, для которого на всех страницах сайта выводится информация, для примера пусть будет : Персональные сообщения (ПС).

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

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

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


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

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

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

user posted image
PMICQ
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
icedfox  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 395
Пользователь №: 41702
На форуме: 1 год, 3 месяца, 26 дней
Карма: 13




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

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

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

Могу ошибаться, ибо не уверен в своих выводах, сижу в гугле пока smile.gif
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Santehnick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Абориген
*****

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 231
Пользователь №: 26735
На форуме: 5 лет, 9 месяцев, 1 день
Карма: 15




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

Ну ок. Что ты хочешь услышать? Онлайн 500 чел. ни о чем не говорит, поскольку неизвестно, сколько и каких запросов будет генерировать каждый из них в единицу времени. Запускаешься и следишь за потреблением ресурсов у сервера, когда они в час-пик начнут достигать пиковых нагрузок, тогда и будешь думать, что делать и как будет дешевле. Преждевременная оптимизация это бесполезное занятие, потратишь кучу времени и всё равно не сможешь всё предусмотреть, в то время когда возможно где-то уже запускается твой конкурент.

Приобретение нескольких более слабых серверов, может быть выгоднее одного мощного по той же цене или даже дешевле, также мы можем избавиться от единой точки отказа. Также это может быть выгоднее, чем оптимизация кода. Особенно когда дали рекламу и из-за возросшего траффика всё начало резко тормозить и в итоге пока будешь оптимизировать свой код, деньги потраченные на рекламу уйдут в воздух, доходы с сайта начнут падать, пользователи начнут бегать к конкурентам, ибо никто сайтом пользоваться не может, всё лежит или сильно тормозит.

Тут нужно, в каждой конкретной ситуации думать головой, а не считать, что два это всегда дороже, чем один. У тебя может быть 1 сервер с 16 гб памяти, а может быть 8 серверов с 2 гб памяти, за ту же цену или чуть дороже/дешевле. Но во втором случае, у тебя не будет единой точки отказа. 8 более слабых серверов например сложнее ддосить, чем 1 мощный сервер.

Цитата
Вот сейчас гуглю практичность использования длинных запросов, вместо частых мелких, здесь у меня небольшие сомнения.

Конечно если у тебя новые события для юзера появляются каждую секунду, то от лонг поллинга смысла нет. HTTP Streaming избавлен от этого недостатка, пока жив запрос он отдает данные на клиент, но при этом не закрывается.

Разница в том, что при лонг поллинге или HTTP стриминге, у тебя события к пользователю доходят прямо в реалтайме. При обычном поллинге раз в 15 сек в псевдореалтайме (с задержкой кароче). В общем это push методы (события проталкиваются клиенту сервером), а обычный поллинг это pull метод (клиент сам тянет события с сервера).
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
icedfox  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 395
Пользователь №: 41702
На форуме: 1 год, 3 месяца, 26 дней
Карма: 13




Santehnick, благодарю вас. Немного опустили меня на землю, т.к. действительно все заранее просчитать сложно, и может действительно решать проблемы по мере их поступления biggrin.gif
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22694
Пользователь №: 20039
На форуме: 7 лет, 2 дня
Карма: 599




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).
PMПисьмо на e-mail пользователюICQ
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
icedfox  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 395
Пользователь №: 41702
На форуме: 1 год, 3 месяца, 26 дней
Карма: 13




inpost, благодарю за подсказку.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

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

Опции темы Ответ в темуСоздание новой темыСоздание опроса