laravel 广播细节讲解
1、应用场景
1、通知(Notification) 或 信号(Signal)
2、通知是最简单的示例,也最经常用到。信号也可看作是通知的一种展现形式,只不过信号没有UI而已。
3、Activity Streams(feeds)是社交网络的核心。如微信朋友圈的点赞和评论,A可以实时看到B的点赞,B可以实时看到A的评论。
4、聊天信息的实时显示
2、模块组成
3、频道类型
1、公共频道:Channel 2、私有频道:PrivateChannel 3、存在频道:PresenceChannel
注意:
订阅公共频道不需要权限验证,会直接提示成功;私有频道private和存在频道presence在进行订阅的过程中,会向服务器端发送权限验证,看是不是有权限可以订阅该频道;
私有频道private和存在频道presence的区别在于,私有频道private能够接收其他成员发送的消息,而存在频道presence除此之外,还能够在用户的加入与离开时接收信息;
设置频道的方法(channel就是设置公共频道)在APP/Events目录下
4、配置广播
1、在.env中的BROADCAST_DRIVER设置广播驱动(Pusher类型超过一定条数需要付费)
2、开启广播配置文件,在config/app.php中的providers数组中打开注释App\Providers\BroadcastServiceProvider::class
3、设置广播队列的驱动,在.env的QUEUE_CONNECTION设置驱动,REDIS_QUEUE设置队列名称,具体细节在config/queue.php中
5、监听事件广播
实现ShouldBroadcast接口的事件被触发时,则会进行广播操作;(同时,还有一个接口叫ShouldBroadcastNow,与ShouldBroadcast接口的不同在于,将实现ShouldBroadcastNow接口的事件放入队列中时,会被放入叫sync的队列中)
6、触发事件,发送广播
1、直接事件触发:event(new \App\Events\Comment($user, true)); 2、帮助函数broadcast,间接触发事件:broadcast(new \App\Events\Comment($user, true)); 3、广播管理类,间接触发事件,直接广播: $manager = app(Illuminate\Broadcasting\BroadcastManager::class); $manager->event(new \App\Events\Comment($user, true)); 4、广播管理类,间接触发事件,放入队列: $manager = app(Illuminate\Broadcasting\BroadcastManager::class); $manager->queue(new \App\Events\Comment($user, true));
注意:括号中的参数,对应构造中的参数,没有为空
7、事件广播类介绍
8、成功标志
后端:判断后端配置是否成功
1、执行广播后(参考第六条),在redis中能看到广播队列,执行queue::work后能消费广播,说明成功。
前端:前端目前有安装js扩展来支持订阅广播频道或者使用swoole来实现