Laravel Echo и Laravel Echo-сервер и сокет: Distin guish присоединяются и оставляют события на стороне сервера - PullRequest
0 голосов
/ 22 марта 2020

Я создаю веб-сервис для мобильного приложения. Мне нужно знать, какие мобильные пользователи онлайн. Я реализовал это с помощью Laravel echo- laravel echo server-socket io и redis. Все работает, и по каналу присутствия клиент прослушивает события.

Проблема в том, что события выхода и соединения находятся на стороне клиента, а когда пользователь покидает канал, мне нужно удалить его из списка. хранится в Redis, на самом деле мне нужно знать, что из присоединения или выхода происходит на стороне сервера, а не на стороне клиента, чтобы иметь возможность обновлять пользователей онлайн в Redis.

Как я могу это сделать?

Мои решения

Решение 1

Если есть какая-либо реализация метода here на стороне сервера, которая возвращает онлайн-пользователей, он может работать, фактически я могу сравнить мой список с here для получения последнего обновления.

Решение 2

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

чем заранее.

1 Ответ

1 голос
/ 02 апреля 2020

Вы должны использовать Каналы присутствия для этой функции.

Смотреть это видео Laracast Episode 8 , вы можете адаптировать примеры там со своим автономным списком пользователей.

Я предлагаю вставить user.id онлайн-пользователя в список массивов participants, используя каналы here, joining, leaving, как показано на видео.

Когда выводя полный список users, вы можете проверить, подключены ли они к сети, используя , включая .


const participants = [4, 34, 57, 70]

for (user of users) {

  if( participants.includes(user.id) ) {
   // The user is online, Set an online style or something
  }

}

...