Intereting Posts
php не распознается как внутренняя команда (в Windows) Почему не работает моя проверка кода CodeIgniter? PHP – альтернативы runkit для перехвата вызовов методов Вычитание двух дат в php компактные все данные формы с javascript как вставить несколько значений флажка в базу данных, используя php Как добавить разрыв строки в середине точки, разделенной пробелами Parse "passwd" команда с phpseclib PHP Startup: невозможно загрузить динамическую библиотеку 'C: \ Program Files (x86) \ PHP \ v5.6 \ ext \ php_sqlsrv_55_ts.dll Установка Symfony в автономном режиме с помощью композитора Трудность запроса двух разных таблиц в базе данных с использованием SQL в PHP-документе Как проверить частичное сходство двух строк в PHP Изменение ключей с помощью array_map на многомерных массивах с использованием PHP Проверить, существует ли ключ и получить соответствующее значение из массива в PHP Action Script 3. Как получить данные из swf (as) в php и записать в базу данных

Проверьте, находится ли пользователь на странице

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

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

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

  3. Пользователи чата с хостом на основании того, что они подписались

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

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

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

Каждый раз, когда пользователь предпринимает действия (обновление чата, отправленное сообщение, посещаемая страница и т. Д.), Токен, связанный с пользователем (токен, который сохраняется на вашем сервере, например, 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» вместо того, чтобы делать это нажатием клавиши или каждым сообщением. Процедура такая же: сообщите серверу, что вы находитесь в сети, зарегистрируйте свое существование и верните ему список товарищей по чате.

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

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