laravel - 无法读取 Laravel Echo 中的事件
问题描述
"laravel-echo": "^1.6.0",
"pusher-js": "^5.0.2",
我正在使用 Laravel WebSockets 使用 Laravel Echo 将事件发送到我的 Vue.js 应用程序: import Echo from 'laravel-echo';
window.Pusher = require('pusher-js');
首先,当我连接我的应用程序时,我看到了这条消息:
Connection id 473581849.201555836 sending message {"event":"pusher:connection_established","data":"{\"socket_id\":\"473581849.201555836\",\"activity_timeout\":30}"}
当我断开连接时,我看到了这个:
Connection id 603442282.571320345 closed.
所以该应用程序与 Laravel WebSocket 通信良好,这没有问题,因为它从我的应用程序接收到连接和连接数据包。
当我尝试在前端读取来自服务器的数据包时,我的问题就来了,我就是无法得到它。
const echo = new Echo({
broadcaster: 'pusher',
cluster: process.env.WEBSOCKET_CLUSTER,
key: process.env.WEBSOCKET_KEY,
wsHost: process.env.WEBSOCKET_URL,
wssHost: process.env.WEBSOCKET_URL,
wsPort: process.env.WEBSOCKET_PORT,
wssPort: process.env.WEBSOCKET_PORT,
encrypted: process.env.WEBSOCKET_ENCRYPTED,
disableStats: process.env.WEBSOCKET_DISABLE_STATS,
enabledTransports: ['ws', 'wss']
// auth: {
// headers: {
// 'Accept': 'application/json',
// 'Authorization': 'Bearer ' + window.localStorage.getItem('accessToken')
// }
// }
});
export default ({ Vue }) => {
Vue.prototype.$echo = echo;
};
例如,收到一个事件(这是我从 ssh 控制台得到的):
Connection id 545411452.62710705 sending message {"event":"log-message","channel":"private-websockets-dashboard-api-message","data":{"type":"api-message","time":"20:06:24","details":"Channel: androidMobile, Event: App\\Events\\UpdateAndroidNavBarCounts","data":"{\"message\":{\"countincompletereports\":0,\"countviewmyreports\":1002,\"countpoints\":300,\"user_id\":63}}"}}
这个事件在这里:App\Events\UpdateAndroidNavBarCounts
我无法在我的前端得到它,我试过这个:
this.$echo.channel('androidMobile')
.listen('.App.Events.UpdateAndroidNavBarCounts', function (data) {<------------
console.log('This is a test 2');
this.$store.dispatch('common/UpdateAndroidNavBarCounts', data, { root: true });
})
这个
this.$echo.channel('androidMobile')
.listen('App.Events.UpdateAndroidNavBarCounts', function (data) {<------------
console.log('This is a test 2');
this.$store.dispatch('common/UpdateAndroidNavBarCounts', data, { root: true });
})
这个:
this.$echo.channel('androidMobile')
.listen('.UpdateAndroidNavBarCounts', function (data) {<------------
console.log('This is a test 2');
this.$store.dispatch('common/UpdateAndroidNavBarCounts', data, { root: true });
})
甚至这个:
this.$echo.channel('androidMobile')
.listen('UpdateAndroidNavBarCounts', function (data) { <------------
console.log('This is a test 2');
this.$store.dispatch('common/UpdateAndroidNavBarCounts', data, { root: true });
})
我从未设法看到 console.log('This is a test 2'); 信息。
任何帮助将不胜感激,因为我已经为此苦苦挣扎了好几天,我开始相信这是一个错误。
谢谢你。
解决方案
好的,随着时间的流逝,我解决了...
我使用的是 Quasar 框架,这是我的引导文件的顶部:
import Echo from 'laravel-echo';
window.Pusher = require('pusher-js');
window.Pusher.logToConsole = true;
当我添加这个 logToConsole = true; 参数,我可以开始看到从 Android 手机到 API 的通信。
我的问题是这样的:
authEndpoint: process.env.WEBSOCKET_AUTH_URL
假设 WEBSOCKET_AUTH_URL = https://mywebsite.com
不知道为什么,但如果我添加这个:
authEndPoint: process.env.WEBSOCKET_AUTH_URL + '/broadcasting/auth'
它不起作用,网址被分成2个字符串。
我也试过这个:
authEndPoint: JSON.stringify(process.env.WEBSOCKET_AUTH_URL) + '/broadcasting/auth'
也没有运气,所以我在 .env 文件中添加了整个 url:
WEBSOCKET_AUTH_URL = https://mywebsite.com/broadcasting/auth
现在它起作用了。
推荐阅读
- kframework - 有没有办法向 hooked sort Int 添加新的构造函数?
- angular - 订阅的角度返回结果为 Observable
- google-cloud-firestore - 分析 Firebase 云功能依赖项
- html - VS-Code 中的 HTML 格式设置 - 始终换行
- javascript - 在 JavaScript 中解密 AES
- xcode - 无效分支/重复分支
- google-apps-script - UrlFetch 失败,因为向指定 URL 发送的流量过多。API 函数自动调用
- laravel - 无法在本地 Laravel 调度程序上运行创建的命令
- react-native - 如何在本机反应中以表格格式显示数据?
- sdn - 如何在 OpenDaylight 控制器中使用 TSDR 功能和 Dlux 功能?