Laravel Канал присутствия: Хранение присоединяющихся и оставляющих пользователей в базе данных - PullRequest
1 голос
/ 05 апреля 2020

У меня это работает:

Echo.join(`chat.${roomId}`)
    .here((users) => {
        //
    })
    .joining((user) => {
        this.users.push(user);
        this.saveStatus(user, 'online');
    })
    .leaving((user) => {
        this.users = this.users.filter(u => u.id != user.id);
        this.saveStatus(user, 'offline');
   });

Это показывает мне точный список присутствующих пользователей. Но я хочу также сохранить их статус в базе данных с отметкой времени.

Итак, я подумал об этой функции:

saveStatus(user, status) {
   axios.post("/logbooks", { user_id: user.id, status: "offline"})
}

И вызов этой функции в состоянии присоединения и выхода. Но это не совсем точно: он не хранит значения, когда в сети только один пользователь. А когда 20 пользователей находятся в автономном режиме и один пользователь выходит в автономный режим>, это значение будет сохранено в 19 раз.

Любые советы, как получить более точный онлайн-офлайн-журнал в базе данных?

Ответы [ 2 ]

0 голосов
/ 05 апреля 2020

Если вы используете Pusher Channels, вы можете настроить веб-залы присутствия для своего приложения Channels. Вы можете активировать веб-хуки в своей информационной панели для каждого приложения.

веб-крючок присутствия будет активирован для следующих событий; member_added и member_removed (пользователь присоединяется к каналу присутствия или пользователь покидает канал присутствия (отключается)):

Вы можете прослушивать эти события на своем сервере и затем обновлять состояние пользователя в зависимости от того, какие события вы получаете.

Если пользователь может присоединиться к нескольким комнатам (каналам) одновременно (например, комната1, комната2, комната3), вы можете отследить, подключен ли пользователь к сети или нет, указав c канал присутствия пользователя.

Например, если пользователь называется Joe Bloggs, вы подключитесь к каналу joebloggs при первом подключении к вашему приложению Pusher. (если пользователь присоединяется к этому каналу, он находится в сети, если пользователь покидает этот канал, он находится в автономном режиме)

0 голосов
/ 05 апреля 2020

Вы можете решить эту проблему, используя Laravel Echo Server (вместо Pusher) и Redis. Вот документация:

https://github.com/tlaverdure/laravel-echo-server#presence -каналы

Redis обрабатывает механизм публикации / подписки. Laravel Echo Server публикует каждый раз, когда кто-то присоединяется / покидает канал присутствия, и с помощью команды Artisan вы можете подписаться на Redis и реагировать на присоединение / выход, уведомив вашу базу данных.

...