Захватывать интервалы времени, когда кто-то был в сети? Как бы вы помешали этой функции? - PullRequest
4 голосов
/ 18 апреля 2010

Наша цель - построить временные шкалы, указывающие периоды времени, когда пользователь был в сети. (На самом деле не имеет значения, о каком пользователе мы говорим и где он был в сети). Чтобы получить информацию о сетевых пользователях, мы можем вызвать метод 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

А теперь вопрос ...

  1. Как бы вы хранили информацию для реализации таких сроков?
  2. Как бы вы запросили / вычислили информацию о периодах времени, когда пользователь был в сети?

Дополнительная информация ..

  1. Вы не можете обновлять информацию о автономных пользователях, только о тех, кто «в данный момент» онлайн.
  2. Решение должно быть гибким: может быть представлена ​​информация о времени, относящаяся к любому часовому поясу.
  3. Мы должны хранить информацию только за последние 7 дней.
  4. Каждый пользователь в сети автоматически получает свой идентификатор в нашей базе данных.

Уфф ... мне было действительно трудно писать это, потому что мой английский довольно плохой, но я надеюсь, что мой вопрос будет понятен для вас.

Спасибо.

Ответы [ 2 ]

1 голос
/ 18 апреля 2010

Существует два разных способа измерения «онлайн» статуса:

  1. Сделайте предположение, что когда кто-то нажимает на страницу, он находится в сети в течение некоторого условного интервала после этого, например, 5 минут. Поэтому, если они нажимают на страницу 4:03, 4:05 и 4:09, у них будет онлайн интервал от 4:03 до 4: 09-4: 14 (в зависимости от того, какие алгоритмы / предположения вы делаете относительно последнего клика ); или

  2. Используйте Javascript и / или Flash-процесс «сердцебиение», чтобы отслеживать частоту открытия страниц.

(1) встречается чаще. (2) часто оставляет людей осторожными в вопросах конфиденциальности. Другой способ просмотра этого состоит в том, что (1) является пассивным мониторингом, тогда как (2) является активным мониторингом.

Есть много вариантов (1). Интервал не может быть фиксированным. Это может варьироваться в зависимости от того, на какой странице находится пользователь. Это может быть построено из предположений или статистической выборки или даже просто вероятностных моделей. В простейшем случае "кто онлайн?" это просто список пользователей, которые что-то нажали за последние 5 (например) минут, что легко понять (так как вы записываете каждый просмотр страницы).

0 голосов
/ 18 апреля 2010

Я бы сделал что-то вроде этого (псевдокод)

UPDATE session_log SET last_online = NOW() WHERE user = ... AND last_online = '10 minutes ago'
IF NOT UPDATED:
    INSERT INTO session_log (last_online, user) VALUES(NOW(), user)

Должен быть столбец created at (или аналогичный), конечно же, но таким образом вы можете легко отслеживать сеансы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...