Laravel 推送事件未触发

Posted

技术标签:

【中文标题】Laravel 推送事件未触发【英文标题】:Laravel pusher event not getting triggered 【发布时间】:2021-11-03 06:10:32 【问题描述】:

这是我的 .env 代码->

BROADCAST_DRIVER=pusher
PUSHER_APP_ID=xxxxx
PUSHER_APP_KEY=xxxxx
PUSHER_APP_SECRET=xxxxx
PUSHER_APP_CLUSTER=xxxxx

这是我的配置代码 ->

 'pusher' => [
            'driver' => 'pusher',
            'key' => env('PUSHER_APP_KEY'),
            'secret' => env('PUSHER_APP_SECRET'),
            'app_id' => env('PUSHER_APP_ID'),
            'options' => [
                'cluster' => env('PUSHER_APP_CLUSTER'),
                'useTLS' => true,
                'encrypted' => true,
            ],
        ],

这是我的活动代码 ->

<?php

namespace App\Events;


use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class orderEvent implements ShouldBroadcast

    use Dispatchable, InteractsWithSockets, SerializesModels;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public $text;

    public function __construct($text)
    
        $this->text = $text;
    

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    
        return new Channel('fish20');
    

最后这是我触发事件的测试路线,但实际上什么也没发生 :( . ->

Route::get('/get', function () 
    $text = 'New order received.';
    event(new orderEvent($text));
);

我看不到调试控制台上触发的任何事件 我的推送频道。

【问题讨论】:

在你的 get 路由中,将事件请求换成 dd("test: $text");它会出现在屏幕上吗? 当然可以,而且我认为这与事件触发器有任何关系,因为我发送的任何数据都应该触发事件,我应该在调试控制台上看到它,对吗? 【参考方案1】:

我得到了解决方案。出于某种原因,laravel 在事件中使用队列,而我的队列连接是数据库,所以像这样 -> QUEUE_CONNECTION=database 并且我删除了它并使其同步,以便它获得触发器并将其放入队列以供以后使用 -> QUEUE_CONNECTION=sync

您的事件文件还有另一种方法,而不是 ShouldBroadcast 使用这个 -> ShouldBroadcastNow

【讨论】:

【参考方案2】:

您应该在路由中使用broadcast(new orderEvent($text)); 而不是event(new orderEvent($text));

【讨论】:

它之前工作过,突然停止工作。我试过了,但效果不大:( .【参考方案3】:

您也需要共享您的客户端代码。

如果忘记实现客户端代码,可以阅读Broadcasting的官方文档。我还发现 this tutorial 使用的是旧版本的 Laravel,但概念没有太大变化。

【讨论】:

我的客户端代码没问题,因为我使用了推送器的事件创建器并发送了事件并且它可以工作。问题出在我的后端,因为我没有看到在我的推送调试控制台上触发任何事件。

以上是关于Laravel 推送事件未触发的主要内容,如果未能解决你的问题,请参考以下文章

输入未更改时观察者未触发更新事件 - Laravel

如何在后台 laravel 中运行推送通知循环?

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

我在哪里可以获得 Laravel 事件的完整列表(由核心库触发)?

即使事件被触发,Laravel 监听器也没有被触发

从 wordpress 触发 laravel 事件