2014-10-27 2 views
1

У меня есть собственный скрипт форума в PHP (Yii2 на самом деле), и я хочу показать онлайн-пользователей. Было бы легко, если бы пользователи были активны до выхода из системы. Но это не тот случай. Большую часть времени пользователь покидает свои компьютеры, но они неактивны. Здесь я мог бы использовать временные ограничения (продлевать время с каждым запросом и удалять те, которые были за это время), но разве это не избыток?Forum Current Online users

Есть ли популярный/лучший способ мониторинга онлайн-пользователей на форуме?

+0

Как вы знаете, что кто-то «оставил свою машину включенной и неактивной», а не читал очень длинный пост форума? Или это не имеет значения? Будут ли они считаться неактивными? –

+0

после того, как скажем, пятнадцать минут бездействия (не каждый пользователь запроса отправляет обновления, которые он активен) помечает их неактивными, поэтому другие пользователи (которые просматривают) не будут видеть прежнего пользователя как активного Я ответил на ваш вопрос, пожалуйста? –

+1

Вы сделали, спасибо :) 2 способа, которыми вы можете это сделать (от верхушки головы). ** 1. ** У вас есть обратный отсчет в JavaScript за 900 секунд, чтобы отправить запрос AJAX на ваш сервер, чтобы пометить пользователя как неактивного. ** 2. ** Обновите последнее действие пользователей при каждом запросе страницы. –

ответ

3

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

$('body').on('keydown mousemove scroll', function() { 

    clearTimeout(notifyTimer); 
    notifyTimer = setTimeout(function() { 
      $.get('my-server.com/user-is-active'); 
    }, 60 * 1000); 
}); 

На стороне сервера, обновите last-active поле в таблице пользователей с текущим временем. При отображении онлайн-пользователей выберите их с помощью last-active > now - 15 min.

+0

этот тоже блестящий. Благодаря! –