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事件不是广播的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 事件广播没有被拾取 laravel-echo-server

广播到推送器时如何重命名 Laravel 事件?

广播 laravel 事件和多个频道

带有 Redis 的 Laravel 广播无法工作/连接?

laravel 事件应该广播不起作用

Laravel 5.4 事件广播不适用于 vuejs