Laravel5.4,广播事件,pusher 的配置以及使用

发表于2年前, 整理文章迁移过来, 原文地址https://learnku.com/articles/...

最近要写一个聊天室,于是了解了一下laravel的事件广播,参考资料来源于http://laravelacademy.org/pos... 但是在跟随博主动手的时候, 发现事件成功触发, 但是pusher调试控制台上并没有收到事件。经过调试找到问题所在。

首先我们先创建一个事件:

php artisan make:event TestEvent

最终, 事件的代码如下, 这里有一个注意点就是

如果该事件没有继承use IlluminateContractsBroadcastingShouldBroadcast; 接口,那么触发事件,将不会发送事件至pusher 服务器上.
use ...
// 如果该事件没有继承use Illuminate\Contracts\Broadcasting\ShouldBroadcast; 接口,那么触发事件,将不会发送事件至pusher 服务器上.
class TestEvent implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;
    // 类型需为public 
    public $msg;

    public function __construct($msg)
    {
        $this->msg = $msg;
    }

    public function broadcastOn()
    {
        return [
            'test'
        ];
    }
}

为了测试方便,我们创建一个artisan 命令来触发事件.

php artisan make:command TestEventCommand

打开命令类 app/Console/Commands/TestEventCommand.php 编辑后如下

    class TestEventCommand extends Command
{

    protected $signature = 'pusher:test {message}';
    protected $description = 'pusher test';


    public function __construct()
    {
        parent::__construct();
    }

    public function handle()
    {
        event(new \App\Events\TestEvent($this->argument('message')));
    }
}

打开 app/Console/Kernel.php, 将刚创建的命令类添加至 $commands

    protected $commands = [
        Commands\TestEventCommand::class,
    ];

事件代码基本完成, 接下来导入pusher

composer require pusher/pusher-php-server

当pusher 成功导入之后 需要在env中配置, BROADCAST_DRIVER 需配置为pusher。 config/broadcasting.php 文件 BROADCAST_DRIVER 默认为null

- PUSHER_APP_ID=you_app_id
- PUSHER_APP_KEY=you_app_key
- PUSHER_APP_SECRET=you_app_secret
- BROADCAST_DRIVER = pusher

另外在这里测试发现如果 QUEUE_DRIVER 配置是redis 那么当触发事件的时候不会调用IlluminateBroadcastingBroadcastManager 下的createPusherDriver方法.也就是不生成pusher类发送事件. QUEUE_DRIVER应配置为sync


配置完成之后 我们就可以通过artisan 命令向pusher服务器发送事件,

php artisan pusher:test "hello"

那么,将会在pusher debug-console 上看到

你可能感兴趣的:(laravel,php)