Я создаю одно-чат-приложение, которое позволяет пользователям размещать номера. Просто чтобы дать немного больше отзывов:
Пользователь создает комнату (комнаты общедоступны, любой может просматривать, но если пользователь не зарегистрировался, чат будет отключен, и пользователю будет предложено зарегистрироваться в чате).
Другие пользователи регистрируются в комнате
Пользователи чата с хостом на основании того, что они подписались
Я хотел бы показать, включен ли хост или нет. Или сделать еще один шаг, показать, находится ли хост в комнате.
Я не уверен, как это сделать.
В основном, это работает следующим образом.
Каждый раз, когда пользователь предпринимает действия (обновление чата, отправленное сообщение, посещаемая страница и т. Д.), Токен, связанный с пользователем (токен, который сохраняется на вашем сервере, например, DB) обновляется текущим временем.
| User ID | Last action | ------------------------------------- | 14 (mark) | 2012-02-09-10:34:53 | | 56 (phil) | 2012-02-09-09:12:34 | | 9 (john) | 2012-02-09-10:33:11 |
И тогда вы решаете, что пользователь в сети, если его токен не слишком стар (5/10 минут?)
Вы можете улучшить этот метод, если вы используете AJAX для отправки периодического запроса на сервер каждые 1 минуту или около того. Этот запрос AJAX обновляет значение токена. Итак, таким образом, вы можете сказать, что пользователь подключен к сети, если он ничего не делает, кроме того, что смотрит на страницу. И когда он уходит (закрывает браузер или вкладку), периодический вызов AJAX прекращается, поэтому после 5/10 минут пользователь объявляется автономным .
Удачи!
предположим, что у вас 5 человек в комнате (и один или несколько из них обязательно будут активны), выполните следующие действия:
для каждого действия, которое принимает пользователь (будь то нажатие клавиши или фактическая отправка сообщения), «пинг» сервера (отправьте ему сообщение, которое вы есть), и запишите его (возможно, в вашей базе данных) время, когда это событие имело место. (обратите внимание, как в facebook есть «Пользователь печатает …» – вот и все.
в свою очередь, для отправки этого действия (через ajax, я полагаю) ответ сервера – это список пользователей в этой комнате, которые находятся в сети, а не в Интернете. сделайте это, сравнивая текущее время со временем последнего действия для каждого пользователя внутри (текущее время – последнее активное время = время прочь)
зная, кто в сети и нет, перестройте «список матчей» в своем браузере
вы можете сделать множество возможностей. например, разрешите 5 минут или еще, этот пользователь простаивает. если разница в времени 15 минут и более, подумайте о том, что человек выключен.
вы также можете сделать шаг вперед, проверив сервер на наличие обновлений для онлайн-пользователей, иначе называемых «heartbeat» вместо того, чтобы делать это нажатием клавиши или каждым сообщением. Процедура такая же: сообщите серверу, что вы находитесь в сети, зарегистрируйте свое существование и верните ему список товарищей по чате.
обратите внимание, что в этом приложении (чат браузера) нет никакого способа, чтобы сервер знал, что вы в автономном режиме, закрыл браузер и т. д., поэтому вам нужно это «сердцебиение», а также регулярно регистрировать свои действия.
как для хоста … вы должны пометить эту комнату идентификатором хоста, и сердцебиение скажет вам, что он все еще в сети.