Oптимальный способ хранения информации о тех кто онлайн?

Доброе время суток. Задаю вопрос чтобы не изобретать велосипед:


Имеем стандартный проект на php+mysql на среднестандартном сервере. (допустим без memcached и прочего подобного).


Задача: хранить и поддерживать актуальной информацию о том, кто из пользователей онлайн, для того чтобы эту информацию выводить во всех нужных местах, как это делают социальные сервисы. Рассчётное кол-во зарегистрированных пользователей в системе — до 100К. Посещаемость до 1К.


Какой способ посоветуете использовать. Желательно без использования нестандартных расширений PHP и проходов кроном (система используется на многих проектах, и чем меньше настраивать для её корректной работы, тем лучше)


Заранее спасибо.
  • Вопрос задан
  • 4208 просмотров
Пригласить эксперта
Ответы на вопрос 3
Urvin
@Urvin
1. Поле last_visit + индекс
2 агрегирующая memory_table
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Скорее всего у Вас есть механизм оповещения о событиях для пользователя на странице («пришло новое сообщение», «доставлено», "… подтверждено/отклонено" и т.д.) через AJAX. Если нет — надо сделать. Прикрепите к нему (функционалу) этакий PINGER.

Чтобы не гонять по-пусту запросы каждые 3-5 секунд — проверяйте активность пользователя на странице клиентским JS-скриптом. Например, если пользователь не «трогает» страницу в течение 30 сек (не листает, не двигает «мышкой» и отсутствует ввод с клавиатуры, про «активна» ли вкладка — нужно изучать...) вырубаете «ajax-пингер». Ну а с серверного скрипта уже получить статистику — дело техники.

Алгоритм простой:
1. Очередной переход на страницу -> смотрим cookies/html5-history флаг: если не было записи — шлем запрос на сервер и, если успешно (код 200) ставим cookies/html5-history флаг на стороне клиента. включаем таймер на повторные проверки события.
2. Следим за активностью: нет в течении N-секунд — вырубаем AJAX-отправку, НО НЕ таймер!!! Если появилась активность — включаем AJAX.
Таким образом будут регистрироваться сервером только реально работающие с сайтом люди.
Ответ написан
Comet сервер тоже вариант для определения статуса пользователя. Вот пример реализации

И не нагружает сервер, и не использует свою БД и не надо создавать свой сервер по обработке большого количества запросов
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы