2012-07-18 3 views
-2

Я создал чат-систему, использующую php и ajax. Когда пользователь входит в эту чат-систему, в таблице is_online поле статус обновлен до 1. Я использую это поле для отображения текущих участников онлайн.Как получить точное количество онлайн-пользователей в системе чата php?

я должен обновить статус 0, если пользователь закрывает все вкладки моего сайта без нажатия логаута.

Как я могу это сделать?

+0

Взгляните на это: http://stackoverflow.com/questions/1619930/how-to-check-users-leave-a-page – Peon

+0

Возможный дубликат [Лучший способ обнаружить, когда пользователь покидает веб-страницу] (http://stackoverflow.com/questions/147636/best-way-to-detect-when-user-leaves-a-web-page) – JMax

ответ

0

Действительно плохой метод.


Составьте таблицу online_users с полями name и timeout. Сохраните имя пользователя (или идентификатор или любую другую идентификацию) и текущую временную метку + 5 минут (или вы выберите другой порог).

При отображении онлайн-пользователей выберите всех пользователей из этой таблицы, где timeout БОЛЬШЕ, чем текущая временная метка. Пример:

$time = time(); 
$result = mysql_query("SELECT `name` FROM `online_users` WHERE `timeout` > '$time'"); 

И создали CRON, который будет очищать таблицу один раз в день.

И не забудьте обновить timeout.

-1

Я думаю, что вы должны проверять активность пользователя каждые 5 минут, например, как yahoo msgr, когда пользователь выключает свой компьютер. Yahoo показывает статус онлайн еще. Но через 5 минут его показ отключен. его мой алгоритм. Я думаю, что вы не можете проверять каждую секунду, и у него есть задержка для вашего времени проверки.

0

Следите за последним сообщением/действием в таблице. Чтобы обновить счетчик, выберите только те, что их последнее действие было не более, скажем, 1 минута назад. нет А также, если вы хотите использовать эту is_online с ним, который будет держать след выхода из :)

2

Существует нет FAIL ДОКАЗАТЕЛЬСТВА, REALTIME, ЭФФЕКТИВНЫЙ МЕТОД

Теоретически есть НЕТ путь безопасного определения состояния браузера. Есть такие события, как DOM onunload или onbeforeunload Событие. Может быть, вы можете приложить запрос AJAX в ответ на это событие. Это установит online=0. Но проблема в том, что нет гарантии, что это событие всегда будет срабатывать. (Как, что происходит, когда процесс браузера убит?)

Единственное стандартное решение - отправлять периодические очень легкие запросы AJAX на сервер. Программа на стороне сервера должна поддерживать поле lastSeenAtTime для каждого пользователя и автоматически устанавливать ноль, если он не получит запрос в течение определенного времени (например, через 10 минут может быть?)

Смежные вопросы