这是我的.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));
});
在我的pusher通道的调试控制台上看不到任何触发的事件。
发布于 2021-09-06 15:21:31
我找到解决方案了。由于某种原因,QUEUE_CONNECTION=database在事件中使用队列,而我的队列连接是数据库,所以就像这样,-> QUEUE_CONNECTION=database和我删除了它,并使其同步,以便它获得触发器,并在以后像-> QUEUE_CONNECTION=sync那样将其排队
此外,在事件文件上还有另一种方法,而不是使用ShouldBroadcast -> ShouldBroadcastNow
发布于 2021-09-06 06:40:15
你也需要分享你的客户端代码。
如果您忘记实现客户端代码,您可以阅读有关Broadcasting的官方文档。我还发现了this tutorial,它使用的是Laravel的旧版本,但概念没有太大变化。
发布于 2021-09-06 11:50:39
您应该在路由中使用broadcast(new orderEvent($text));而不是event(new orderEvent($text));。
https://stackoverflow.com/questions/69069691
复制相似问题