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

nightfall發表於2017-03-12

最近要寫一個聊天室,於是瞭解了一下laravel的事件廣播,參考資料來源於http://laravelacademy.org/post/5351.html, 但是在跟隨博主動手的時候, 發現事件成功觸發, 但是pusher除錯控制檯上並沒有收到事件。經過除錯找到問題所在。

首先我們先建立一個事件:

php artisan make:event TestEvent

最終, 事件的程式碼如下, 這裡有一個注意點就是

如果該事件沒有繼承use Illuminate\Contracts\Broadcasting\ShouldBroadcast; 介面,那麼觸發事件,將不會傳送事件至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,
    ];

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 那麼當觸發事件的時候不會呼叫Illuminate\Broadcasting\BroadcastManager 下的createPusherDriver方法.也就是不生成pusher類傳送事件. QUEUE_DRIVER應配置為sync

    配置完成之後 我們就可以通過artisan 命令向pusher伺服器傳送事件,

    php artisan pusher:test "hello"

    那麼,將會在pusher debug-console 上看到
    file

本作品採用《CC 協議》,轉載必須註明作者和本文連結

時間似水流逝,智慧與日俱增。

相關文章