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來實現