Laravel事件不是广播

Ash*_*ett 7 events laravel vue.js laravel-echo

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

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

这是我做的:

1)添加配置到.env.

2)添加配置为bootstrap.js:

window.Echo = new Echo({
  broadcaster: 'pusher',
  key: 'mykey',
  encypted: false
});
Run Code Online (Sandbox Code Playgroud)

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

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

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

5)创建了App\Events\UserSentMessage一个PrivateChannel以命名方式广播的事件chat.我也尝试过广播Channel.我检查过事件是event()在控制器中调用助手时触发的,它似乎没有被广播.我也试过broadcast在提到的控制器中使用该方法.

6)在mountedVue生命周期钩子中的有效Vue组件中添加了以下内容(组件按预期呈现数据等,只是不与Laravel Echo atm一起使用):

    Echo.private('chat').listen('UserSentMessage', (data) => {
                console.log(data);
            }, (e) => {
                console.log(e);
            });
Run Code Online (Sandbox Code Playgroud)

也尝试过:

     Echo.channel('chat').listen('UserSentMessage', (data) => {
                console.log(data);
            }, (e) => {
                console.log(e);
            });
Run Code Online (Sandbox Code Playgroud)

Vue组件成功订阅指定的通道.推送器调试控制台识别出它正在订阅,但触发后的事件永远不会被广播.

似乎广播事件存在问题.我也尝试过使用broadcast()帮助器,而不是event()帮助器.

此外,在使用Laravel Echo via订阅活动时Echo.private().它似乎以通道名称为前缀private,因此我也尝试将广播(在事件中)广播到名为的频道private-chat.

num*_*8er 12

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

php artisan queue:listen
Run Code Online (Sandbox Code Playgroud)

  • 在拉我的头发几个小时后,你拯救了我的一天。我没有意识到它都被堆放在队列中。谢谢!! (2认同)

Yar*_*rco 6

就我而言,我的事件类文件是由“make:event”生成的,它确实有broadcastOn方法...但是没有implements ShouldBroadcast〜它导致 laravel-echo-server 没有输出任何内容〜

Laravel 框架 8.13.0


mat*_*liu 5

该事件不会立即广播,它会被发送到队列,只有当您监听或在队列上工作时,该事件才会被消耗。如果您想立即执行作业,请设置 QUEUE_DRIVER=sync 。请参阅:laravel 队列