您好,登錄后才能下訂單哦!
本篇內容主要講解“php怎么實現實時接收數據”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“php怎么實現實時接收數據”吧!
1.發布訂閱的Pub/Sub
發布訂閱(Pub/Sub):目前廣泛使用的通信模型,它采用事件作為基本的通信機制,提供大規模系統所要求的松散耦合的交互模式:訂閱者(如客戶端)以事件訂閱的方式表達出它有興趣接收的一個事件或一類事件;發布者(如服務器)可將訂閱者感興趣的事件隨時通知相關訂閱者------是不是與設計模式里面的觀察者模式一個媽媽生的?
Redis的Pub/Sub非常非常簡單,運行穩定并且快速。支持模式匹配,能夠實時訂閱與取消頻道。比如很多用Pub/Sub構建的實時聊天系統、聊天群發的例子。
Redis 客戶端可以訂閱任意數量的頻道。
Redis提供了發布訂閱功能,可以用于消息的傳輸,Redis的發布訂閱機制包括三個部分,發布者,訂閱者和Channel。
發布者和訂閱者都是Redis客戶端,Channel則為Redis服務器端,發布者將消息發送到某個的頻道,訂閱了這個頻道的訂閱者就能接收到這條消息。Redis的這種發布訂閱機制與基于主題的發布訂閱類似,Channel相當于主題。
2.發布訂閱的使用場景
最經典的應用場景就是微博和公眾號,任何粉絲只要關注(訂閱)了某一個人的微博或者公眾號,該微博或者公眾號只有有狀態更新,都會將消息推送(發布)到粉絲。
發布訂閱的執行過程是由我們的發布者跟我們的頻道去建立關系,然后把這個消息通過長連接方式發送過去。同時這個時候我們還有一個訂閱者,我們也需要去訂閱我們的內容,如果說我們訂閱了,那么當我們的頻道收到了某個消息的時候,我們會及時的去給訂閱者做到消息的推送。
那么這里的連接就會涉及到我們的長連接和短連接,他們之間有什么區別呢?
3.PHP實現實時發布訂閱
subscribe(消息訂閱端 sub.php):在終端執行sub.php命令,就會處在監聽狀態,等待發布者發布消息進行處理。
$redis=new Redis();
$res=$redis->pconnect('127.0.0.1', 6379,0);
$redis->subscribe(array('luke'), 'callback');
// 回調函數,這里寫處理邏輯
function callback($instance, $channelName, $message) {
echo $channelName, "==>", $message,PHP_EOL;
}
publish(消息發布端 pub.php):
$redis=new Redis();
// 第一個參數為redis服務器的ip,第二個為端口
$res=$redis->connect('127.0.0.1', 6379);
// luke為發布的頻道名稱,hello,world為發布的消息
$res=$redis->publish('luke','hello,world');
4.redis可以實現發布訂閱和消息隊列的功能,兩者的區別在于:
1)redis的訂閱者可以是多個,且可以同時處理發布上來的消息,如果訂閱者不在線(服務沒有啟動)消息將丟失,消息沒有持久化。發布和訂閱是一塊執行的,缺少一個直接忽略這個消息
2)消息隊列只能有一個客戶端來處理,處理完之后消息就被標記或刪除,即使服務端沒有啟動消息也不會丟失
3)兩者的使用場景要根據業務數據的準確度,敏感性決定,比如日志就可以用redis發布訂閱來實現,丟失一點也沒有關系
到此,相信大家對“php怎么實現實時接收數據”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。