Laravel回声回调
Laravel Echo callback
我正在研究 Laravel Echo(使用 socket.io 作为连接器)
但我找不到如何在 user/visitor 成功或未连接到套接字(非通道)时绑定 回调 ,但通常如果已连接。
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和启动其他脚本。
深入查看 laravel 回显源代码,我发现有 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);
});
}
对于任何想弄清楚如何 return 来自 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 Echo(使用 socket.io 作为连接器)
但我找不到如何在 user/visitor 成功或未连接到套接字(非通道)时绑定 回调 ,但通常如果已连接。
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和启动其他脚本。
深入查看 laravel 回显源代码,我发现有 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);
});
}
对于任何想弄清楚如何 return 来自 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);
});
});