• 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

  • 相关阅读:
    jQuery全屏滚动插件fullPage.js
    通过定位实现子元素相对于父元素上下左右居中
    TermDocs
    IndexWriter
    lucene demo引出的思考
    第一个LUCENE程序
    lucene3.5的查询语法
    更改只读文件属性为正常
    设置WINDOWS2003服务器的允许外界访问端口,远程桌面的端口更改
    Cookie在域中的读写实现顶级域共享
  • 原文地址:https://www.cnblogs.com/chenhaoyu/p/11077206.html
Copyright © 2020-2023  润新知