Laravel Echo回调

Fro*_*oxz 3 php socket.io laravel-5 laravel-echo laravel-5.5

我正在研究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' }
    });
}
Run Code Online (Sandbox Code Playgroud)

所以在这里我检查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'
});
Run Code Online (Sandbox Code Playgroud)

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

Fro*_*oxz 8

深入研究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);
    });
}
Run Code Online (Sandbox Code Playgroud)