Проверьте, есть ли пользователь на странице - PullRequest
0 голосов
/ 09 февраля 2012

Я создаю приложение «один на один», которое позволяет пользователям размещать комнаты.Просто чтобы дать немного больше отзывов:

  1. Пользователь создает комнату (комнаты являются общедоступными, каждый может просматривать, но если пользователь не зарегистрировался, чат будет отключен, и пользователю будет предложенозарегистрироваться в чате.)

  2. Другие пользователи регистрируются в комнате

  3. Пользователи общаются с хостом в порядке их регистрации

Я хотел бы показать, если хост находится в сети или нет.Или, чтобы пойти еще дальше, покажите, находится ли хозяин в комнате.

Я не уверен, как это сделать.

Ответы [ 2 ]

5 голосов
/ 09 февраля 2012

По сути, это работает следующим образом.

Каждый раз, когда пользователь выполняет действия (обновление чата, отправка сообщения, посещение страницы и т. Д.), Токен, связанный с пользователем (токен, который сохраняется на вашем сервере, в БДнапример) обновляется с текущим временем.

| 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 минут пользователь объявляется офлайн .

Удачи!

1 голос
/ 09 февраля 2012

Предположим, у вас в комнате 5 человек (и один или несколько человек должны быть активными), выполните следующие действия:

  • за каждое действие, предпринимаемое пользователем (будь то нажатие клавиши или фактическая отправка сообщения), «пинг» сервера (отправка ему сообщения о том, что вы существуете) и регистрация его (возможно, в вашей базе данных) в течение времени это событие произошло. (обратите внимание, что у Facebook есть «Пользователь печатает ...» - вот оно.

  • в свою очередь для отправки этого действия (я полагаю, через ajax) ответ сервера представляет собой список пользователей в этой комнате, которые находятся в сети, а не в сети. сделать это, сравнивая текущее время с временем последней активности для каждого пользователя внутри (текущее время - последнее активное время = время отсутствия)

  • зная, кто в сети, а что нет, перестройте «список друзей в чате» в своем браузере

вы можете сделать множество возможностей. как, скажем, разрешить 5 минут или иначе, этот пользователь бездействует. если разница во времени 15 минут и более, считайте этого человека выключенным.

Вы также можете сделать шаг вперед, отправив на сервер запрос на обновление информации о том, кто находится в сети регулярно, иначе называемый «пульс», вместо того, чтобы делать это нажатием клавиши или при каждом отправке сообщения. Сделайте то же самое: сообщите серверу, что вы подключены к сети, зарегистрируйте свое существование и попросите вернуть список друзей.

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

что касается хоста ... вы должны пометить эту комнату идентификатором хоста, и сердцебиение сообщит вам, если он все еще в сети.

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