最近要寫一個聊天室,於是瞭解了一下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 上看到
本作品採用《CC 協議》,轉載必須註明作者和本文連結