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数组中打开注释AppProvidersBroadcastServiceProvider::class
3、设置广播队列的驱动,在.env的QUEUE_CONNECTION设置驱动,REDIS_QUEUE设置队列名称,具体细节在config/queue.php中

5、监听事件广播

实现ShouldBroadcast接口的事件被触发时,则会进行广播操作;(同时,还有一个接口叫ShouldBroadcastNow,与ShouldBroadcast接口的不同在于,将实现ShouldBroadcastNow接口的事件放入队列中时,会被放入叫sync的队列中)

6、触发事件,发送广播

1、直接事件触发:event(new AppEventsComment($user, true));
2、帮助函数broadcast,间接触发事件:broadcast(new AppEventsComment($user, true));
3、广播管理类,间接触发事件,直接广播:
    $manager = app(IlluminateBroadcastingBroadcastManager::class);
    $manager->event(new AppEventsComment($user, true));
4、广播管理类,间接触发事件,放入队列:
    $manager = app(IlluminateBroadcastingBroadcastManager::class);
    $manager->queue(new AppEventsComment($user, true));

注意:括号中的参数,对应构造中的参数,没有为空

7、事件广播类介绍

8、成功标志

后端:判断后端配置是否成功
    1、执行广播后(参考第六条),在redis中能看到广播队列,执行queue::work后能消费广播,说明成功。

前端:前端目前有安装js扩展来支持订阅广播频道或者使用swoole来实现

 参考链接:https://learnku.com/articles/7137/laravel-broadcast-an-analysis-of-the-source-code-of-the-broadcasting-system

原文地址:https://www.cnblogs.com/chenhaoyu/p/11077206.html