Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

PHP как правильно реализовать онлайн офлайн статус пользователя в реальном времени ?

n0bleman Новичок (0), открыт 10 часов назад
.1 способ записывать активные действия в MySQL каждый раз когда пользователь обновляет страницу И потом получать список всех пользователей и у каждого проверять timesmap если больше минуты то записывать в колонку значение offline а если пользователей 1 миллион каждый раз запрашивать их правильно ли это и скажется на производительность
  1. Scandir по неиспользуемым сессиям устаревшим потом читать сессию вытаскивать из сессии I’d потом искать этот I’d в MySQL и давать ему значение onfline хз только как правильнее
6 ответов
www www Искусственный Интеллект (134540) 10 часов назад
Правильнее при переходе писать в сессию время последней активности и по крону проверять это время и менять статус в соответствующей табличке
n0blemanНовичок (0) 9 часов назад
Один фиг крон выполняет проверку всех пользователей запуская скрипт
n0blemanНовичок (0) 9 часов назад
В любом случае надо всех пользователей пересчитывать циклом из MySQL ?
n0blemanНовичок (0) 9 часов назад
Ты же не знаешь какой из них отключился
www www Искусственный Интеллект (134540) n0bleman, можно даже вьюху накрутить, чтобы лишних данных не гонять по сети
Терр Онтал Мудрец (13147) 10 часов назад
Пусть от клиентского приложения раз в минуту(тридцать секунд, десять секунд или в любой приемлемый интервал времени) приходит особый запрос на сервер. Если запрос пришел, то пользователь онлайн. Если нет, то офлайн. Хранить онлайн/офлайн лучше в каком-нибудь Кеше типа редиса, и там настроить expire для ключа где хранится статус пользователя
n0blemanНовичок (0) 9 часов назад
И каким кодом определить пользователя у которого время вышло ? И записать потом в mysql
Терр Онтал Мудрец (13147) n0bleman, почитай документацию редиса, почитай документацию mysql, почитай документацию языка, на котором ты пишешь и всё узнаешь
Андрей Высший разум (468359) 8 часов назад
Ну так храни сами сессии в БД. И создай в таблице хранения сессий поле с ON UPDATE CURRENT_TIMESTAMP и поле с id пользователя. Автоматически получишь и время последней загрузки страницы, и статусы пользователей - без необходимости обновляемой колонки offline.

Только вот 1 минута - это бессмысленно.

Миллион пользователей ты получишь только через очень много лет. И думать сейчас о том, что может быть когда-то в будущем начнёт тормозить из-за избытка пользователей, по меньшей мере неразумно.
V̲i̲s̲t̲a̲s̲t̲e̲r̲ Искусственный Интеллект (268289) 4 часа назад
пользователей 1 миллион каждый раз
спасибо, поржал
Похожие вопросы