Найти присутствие пользователя, используя комнаты в SocketIO - PullRequest
0 голосов
/ 13 мая 2018

Я пытаюсь создать событие, когда пользователь выходит в онлайн и оффлайн. Поскольку пользователь может открывать несколько вкладок, поиск пользователя в сети с помощью on('connect') и on('disconnect') не будет работать

Вместо этого, каждый раз, когда пользователь присоединяется, я создаю комнату для каждого пользователя и присоединяюсь к ним. Чтобы проверить, что пользователь онлайн, просто посчитай нет. клиентов в этой комнате. Если это 0, то он не в сети. Если его >1, то он онлайн.

Но я хочу выдать даже администратору, когда он выходит в онлайн и офлайн. Как мне этого добиться?

1 Ответ

0 голосов
/ 13 мая 2018

В .on('disconnect', ...) при удалении соединения из своей комнаты проверьте счет. Если счетчик был равен 1 до того, как вы его удалили, то пользователь теперь находится в автономном режиме (после того, как вы их удалите).

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

Если они просто перемещались между страницами, счетчик обнулится, а затем вернется к единице, прежде чем сработает таймер. Всякий раз, когда вы получаете событие connect, вы очищаете любой таймер, ожидающий этого пользователя. Для этого вам нужно будет отслеживать таймер на каком-либо объекте, связанном с пользователем.

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