Предположим, у вас в комнате 5 человек (и один или несколько человек должны быть активными), выполните следующие действия:
за каждое действие, предпринимаемое пользователем (будь то нажатие клавиши или фактическая отправка сообщения), «пинг» сервера (отправка ему сообщения о том, что вы существуете) и регистрация его (возможно, в вашей базе данных) в течение времени это событие произошло. (обратите внимание, что у Facebook есть «Пользователь печатает ...» - вот оно.
в свою очередь для отправки этого действия (я полагаю, через ajax) ответ сервера представляет собой список пользователей в этой комнате, которые находятся в сети, а не в сети. сделать это, сравнивая текущее время с временем последней активности для каждого пользователя внутри (текущее время - последнее активное время = время отсутствия)
зная, кто в сети, а что нет, перестройте «список друзей в чате» в своем браузере
вы можете сделать множество возможностей. как, скажем, разрешить 5 минут или иначе, этот пользователь бездействует. если разница во времени 15 минут и более, считайте этого человека выключенным.
Вы также можете сделать шаг вперед, отправив на сервер запрос на обновление информации о том, кто находится в сети регулярно, иначе называемый «пульс», вместо того, чтобы делать это нажатием клавиши или при каждом отправке сообщения. Сделайте то же самое: сообщите серверу, что вы подключены к сети, зарегистрируйте свое существование и попросите вернуть список друзей.
обратите внимание, что в этом приложении (чат в браузере) сервер не может узнать, что вы отключены от сети, закрыл браузер и т. Д., Поэтому вам необходим этот «сердцебиение», а также регулярное ведение журнала ваших действий.
что касается хоста ... вы должны пометить эту комнату идентификатором хоста, и сердцебиение сообщит вам, если он все еще в сети.