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