Laravel事件不是广播
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel事件不是广播相关的知识,希望对你有一定的参考价值。
我正在为应用程序开发聊天/消息功能。当用户发送消息时,我希望触发并广播特定事件。我当时希望Laravel Echo使用pusher
驱动程序通过Laravel Echo收听活动的广播频道。
我希望Laravel Echo实现在Vue组件中并检索通过事件广播的数据。目前,我无法将活动广播到私人频道或仅播放频道。
这是我做的:
1)将配置添加到.env
。
2)为bootstrap.js
添加了配置:
window.Echo = new Echo({
broadcaster: 'pusher',
key: 'mykey',
encypted: false
});
3)在AppProvidersBroadcastServiceProvider
中添加了auth检查(如果用户现在已登录,则返回true):
Broadcast::channel('chat', function ($user) {
// verify that user is recipient of message
return Auth::check();
});
4)将AppProvidersBroadcastServiceProvider::class,
添加到App/config/app.php
。
5)创建了事件AppEventsUserSentMessage
,在PrivateChannel
上播放,名为chat
。我也尝试过广播到Channel
。我检查了事件是在控制器中调用event()
帮助器时被触发的,它似乎没有被广播。我也尝试在提到的控制器中使用broadcast
方法。
6)在mounted
Vue生命周期钩子中的有效Vue组件中添加了以下内容(组件正在按预期呈现数据等,只是不与Laravel Echo atm一起使用):
Echo.private('chat').listen('UserSentMessage', (data) => {
console.log(data);
}, (e) => {
console.log(e);
});
也尝试过:
Echo.channel('chat').listen('UserSentMessage', (data) => {
console.log(data);
}, (e) => {
console.log(e);
});
Vue组件成功订阅指定的通道。推送器调试控制台识别出它正在订阅,但触发后的事件永远不会被广播。
似乎广播事件存在问题。我也试过使用broadcast()
助手,而不是event()
助手。
此外,当通过Echo.private()
订阅Laravel Echo活动时。它似乎用private
作为频道名称的前缀,所以我也尝试广播(在事件中)一个名为private-chat
的频道。
我只能建议你查看你的.env
文件
并确保BROADCAST_DRIVER
不是log
(尝试pusher
)
并且不要忘记继续运行队列侦听器:
php artisan queue:listen
该事件不会立即广播,它将被发送到队列,只有当您收听或处理队列时,才会消耗该事件。如果要立即执行作业,请设置QUEUE_DRIVER = sync。见:laravel queue
@materliu:这是一个很好的暗示。在我的情况下,我没有创建一个队列,工作目录设置为我正在处理的项目。用马戏团。该事件是在代码中触发的,但没有可用的工作监听器。一旦我运行“php artisan queue:listen”,所有以前的广播都会被处理掉。
通常很难弄清楚复杂系统的哪个部分不起作用。
以上是关于Laravel事件不是广播的主要内容,如果未能解决你的问题,请参考以下文章