Laravel事件不是广播

问题描述 投票:5回答:3

我正在为应用程序开发聊天/消息功能。当用户发送消息时,我希望触发并广播特定事件。我当时希望Laravel Echo使用pusher驱动程序通过Laravel Echo收听活动的广播频道。

我希望Laravel Echo实现在Vue组件中并检索通过事件广播的数据。目前,我无法将活动广播到私人频道或仅播放频道。

这是我做的:

1)将配置添加到.env

2)为bootstrap.js添加了配置:

window.Echo = new Echo({
  broadcaster: 'pusher',
  key: 'mykey',
  encypted: false
});

3)在App\Providers\BroadcastServiceProvider中添加了auth检查(如果用户现在已登录,则返回true):

Broadcast::channel('chat', function ($user) {
  // verify that user is recipient of message
  return \Auth::check();
});

4)将App\Providers\BroadcastServiceProvider::class,添加到App/config/app.php

5)创建了事件App\Events\UserSentMessage,在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的频道。

laravel events vue.js laravel-echo
3个回答
7
投票

我只能建议你查看你的.env文件 并确保BROADCAST_DRIVER不是log(尝试pusher) 并且不要忘记继续运行队列侦听器:

php artisan queue:listen

3
投票

该事件不会立即广播,它将被发送到队列,只有当您收听或处理队列时,才会消耗该事件。如果要立即执行作业,请设置QUEUE_DRIVER = sync。见:laravel queue


0
投票

@materliu:这是一个很好的暗示。在我的情况下,我没有创建一个队列,工作目录设置为我正在处理的项目。用马戏团。该事件是在代码中触发的,但没有可用的工作监听器。一旦我运行“php artisan queue:listen”,所有以前的广播都会被处理掉。

通常很难弄清楚复杂系统的哪个部分不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.