Наша цель - построить временные шкалы, указывающие периоды времени, когда пользователь был в сети. (На самом деле не имеет значения, о каком пользователе мы говорим и где он был в сети). Чтобы получить информацию о сетевых пользователях, мы можем вызвать метод API, someservice.com/api/?call=whoIsOnline
whoIsOnline метод даст нам список пользователей, которые в данный момент онлайн. Но нет метода API для получения информации о том, кто НЕ в сети .
Итак, мы должны построить наши временные шкалы, используя информацию, полученную от whoIsOnline . Конечно, будет ошибка измерения (мы не можем отслеживать информацию в режиме реального времени). Давайте предположим, что мы будем вызывать метод whoIsOnline каждые 2 минуты (да, мы будем запускать наш скрипт по cron каждые 2 минуты).
Например, вызов whoIsOnline в 08:00 вернет
Peter_id
Michal_id
Andy_id
вызов whoIsOnline в 08:02 вернет
Michael_id
Andy_id
George_id
Как видите, Питер перешел в автономный режим, но у нас появился новый лайнер - Джордж.
Доступны следующие инструменты: Db (MySQL) / текстовые файлы / хранилище значений ключей (Redis / memcache) ; не стесняйтесь выбирать любой из них (или даже всех).
Итак, мы должны получить такую информацию
George_id was online...
12 May: 08:02-08:30, 12:40-12:46, 20:14-22:36
11 May: 09:10-12:30, 21:45-23:00
10 May: was not online
А теперь вопрос ...
- Как бы вы хранили информацию для реализации таких сроков?
- Как бы вы запросили / вычислили информацию о периодах времени, когда пользователь был в сети?
Дополнительная информация ..
- Вы не можете обновлять информацию о автономных пользователях, только о тех, кто «в данный момент» онлайн.
- Решение должно быть гибким: может быть представлена информация о времени, относящаяся к любому часовому поясу.
- Мы должны хранить информацию только за последние 7 дней.
- Каждый пользователь в сети автоматически получает свой идентификатор в нашей базе данных.
Уфф ... мне было действительно трудно писать это, потому что мой английский довольно плохой, но я надеюсь, что мой вопрос будет понятен для вас.
Спасибо.