发表于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 上看到