Обратный вызов Laravel Echo

Я изучаю Laravel Echo (с socket.io в качестве соединителя)

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

import Echo from "laravel-echo"; //import Laravel-echo

if(typeof(io) != 'undefined'){ //check if io loaded
    //init Echo
    window.Echo = new Echo({
        broadcaster: 'socket.io',
        host: { path: '/socket.io' }
    });
}

Итак, здесь я проверяю, существует ли io, тогда, скорее всего, сокет работает.

Но можем ли мы привязать обратный вызов, как мы можем сделать с socket.io: пример из документации socket.io

const socket = io('http://localhost');

console.log(socket.id); // undefined

socket.on('connect', () => {
  console.log(socket.id); // 'here we can get socket id'
});

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


person Froxz    schedule 22.09.2017    source источник


Ответы (2)


Углубившись в исходный код laravel echo, я обнаружил, что существует on связыватель событий, который мы не можем сразу вызвать echo.on('connect', ...). Но у нас есть доступ к коннектору и фактическому сокету, так что вот решение:

if(typeof(io) != 'undefined'){ //check if io loaded
    //init Echo
    echo = new Echo({
        broadcaster: 'socket.io',
        host: { path: '/socket.io' }
    });

    //bind our events
    echo.connector.socket.on('connect', function(){
        console.log('connected', echo.socketId());
    });
    echo.connector.socket.on('disconnect', function(){
        console.log('disconnected');
    });
    echo.connector.socket.on('reconnecting', function(attemptNumber){
        console.log('reconnecting', attemptNumber);
    });
}
person Froxz    schedule 22.09.2017

Для тех, кто пытается выяснить, как вернуть обещание из соединения канала присутствия here, у меня сработало следующее:

// return a promise and resolve when the subscription has succeeded
return new Promise((resolve, reject) => {
    echo.connector.channels['presence-' + channel].subscription.bind('pusher:subscription_succeeded', () => {
        return resolve(true);
    });
});
person jbwilhite    schedule 27.03.2019