Laravel Echo回调

时间:2017-09-22 08:42:04

标签: php laravel-5 socket.io laravel-5.5 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 docs中的示例

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

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

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

我需要回调的原因是获取套接字ID并启动其他脚本。

2 个答案:

答案 0 :(得分:4)

深入了解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' }
    });
}
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);
});

答案 1 :(得分:1)

对于试图弄清楚如何从在线渠道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);
    });
});