Laravel 回声回调
Posted
技术标签:
【中文标题】Laravel 回声回调【英文标题】:Laravel Echo callback 【发布时间】:2018-03-03 18:43:06 【问题描述】:我正在研究 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'
);
我之所以需要回调是为了获取socket id并启动其他脚本。
【问题讨论】:
【参考方案1】:深入查看 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);
);
【讨论】:
【参考方案2】:对于任何试图弄清楚如何从 Presence 频道 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);
);
);
【讨论】:
以上是关于Laravel 回声回调的主要内容,如果未能解决你的问题,请参考以下文章