这是我的 .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));
});
我看不到调试控制台上触发的任何事件 我的推送频道。
我找到了解决方案。由于某种原因,laravel 在事件中使用队列,而我的队列连接是数据库,就像这样 ->
QUEUE_CONNECTION=database
我删除了它并使其同步,以便它得到触发并稍后将其排队,像这样 -> QUEUE_CONNECTION=sync
您的事件文件还有另一种方法,而不是
ShouldBroadcast
使用此 -> ShouldBroadcastNow
您应该在路线中使用
broadcast(new orderEvent($text));
而不是 event(new orderEvent($text));
。
如果您正在使用QUEUE_CONNECTION=database,请将其删除并使用QUEUE_CONNECTION=sync。然后事件触发部分就可以工作了。
因为我已经使用 vuejs + laravel + Pusher 实现了聊天应用程序。应用程序运行完美。但我使用队列作业添加了邮件发送过程。所以我将队列连接更改为数据库。最后我的聊天应用程序无法运行。所以我删除了队列连接作为同步。现在推送事件完美运行