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