一、應用場景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來實現