最近在研究Laravel
中的事件广播系统,就拿Pusher作为驱动器来练练手,结果调入了各种坑中。
- 遇到过环境变量加载不到的问题,可能和中间使用过
php artisan config:cache
和php artisan config:clear
有关,就算clear
之后,我对pusher设置的env
配置也是无效的,最后还是通过新增了其他名称的env
配置项,才生效的,原因我也不清楚,可能加载机制和文件写时间有关系吧。 - Laravel的官方文档说,如果要使用Pusher对事件进行广播,需要安装Pusher PHP SDK,命令如下
composer require pusher/pusher-php-server
可惜在调用的时候,却提示“Pusher not found”。
最后我在vendor文件夹里找到Pusher类包,最后手动在config/app.php文件的aliases项目里添加了对Pusher的配置,才解决此Bug。
'Pusher' => \Pusher\Pusher::class
- 最后就是一个非常奇葩的问题了。
Pusher
的类也有了,配置也配置正确,可惜怎么都发送不了事件。最后查看了源代码,发现是调用了Pusher
的trigger
方法,返回的false。我想,这是官网的Pusher类库啊,不会有错啊!可惜我找了很多资料之后,发现,妈的,官方的代码也会有错。这里没有设置SSL
验证为false
,可能是SSL验证引起的。于是加上两行代码再试:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
消息终于成功发送了。
通过在Pusher官网的Debug Console
模块,可以看到新增的事件消息,就代表事件广播成功了。接下来怎么在客户端消费广播信息,就是另一件事情了。