Laravel pusher.js - считать пользовательские сессии

Я начал с Laravel + Pusher и использовал демонстрационное приложение из блога Pusher. Здесь в исходном коде описано, как подсчитываются пользовательские соединения. Но я изо всех сил пытаюсь посчитать сессии пользователя как дополнительное значение.

Пример: Джейн и Джон соединяются, я получаю 2 для usersEditing.length. Если Джейн подключается из двух браузеров, я получаю 1 для usersEditing.length.

<script>
export default {
    props: [
        'note',
    ],

    data() {
        return {
            title: this.note.title,
            body: this.note.body,
            usersEditing: [],
            status: ''
        }
    },

    mounted() {
        Echo.join(`note.${this.note.slug}`)
            .here(users => {
                this.usersEditing = users;
            })
            .joining(user => {
                this.usersEditing.push(user);
            })
            .leaving(user => {
                this.usersEditing = this.usersEditing.filter(u => u != user);
            })
            .listenForWhisper('editing', (e) => {
                this.title = e.title;
                this.body = e.body;
            })
            .listenForWhisper('saved', (e) => {
                this.status = e.status;

                // clear is status after 1s
                setTimeout(() => {
                    this.status = '';
                }, 1000);
            });
    },

    methods: {
        editingNote() {
            let channel = Echo.join(`note.${this.note.slug}`);

            // show changes after 1s
            setTimeout(() => {
                channel.whisper('editing', {
                    title: this.title,
                    body: this.body
                });
            }, 1000);
        },

        updateNote() {
            let note = {
                title: this.title, 
                body:  this.body
            };

            // persist to database
            axios.patch(`/edit/${this.note.slug}`, note)
                .then(response => {
                    // show saved status
                    this.status = response.data;

                    // clear is status after 1s
                    setTimeout(() => {
                        this.status = '';
                    }, 1000);

                    // show saved status to others
                    Echo.join(`note.${this.note.slug}`)
                        .whisper('saved', {
                            status: response.data
                        });
                });
        }
    }
}

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

Пусть кто-нибудь может помочь мне здесь.

Спасибо заранее, Дейв

1 ответ

Джейн и Джон соединяются, я получаю 2 за usersEditing.length, Если Джейн подключается из двух браузеров, я получаю 1 за usersEditing.length,

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

Есть несколько способов сделать это. /channels Конечная точка в толкателе HTTP API позволяет получить subscription_count так же как user_count,

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

var channel = pusher.subscribe('presence-meeting-11');

channel.bind('pusher:subscription_succeeded', function(members) {
  // call your new endpoint
});
Другие вопросы по тегам