0

这是我的 .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));
});

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

4

3 回答 3

1

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

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

于 2021-09-06T15:21:30.700 回答
0

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

于 2021-09-06T11:50:38.907 回答
0

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

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

于 2021-09-06T06:40:14.540 回答