中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php怎么實現實時接收數據

發布時間:2022-03-14 16:40:09 來源:億速云 閱讀:456 作者:iii 欄目:web開發

本篇內容主要講解“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怎么實現實時接收數據”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

德惠市| 绥江县| 克什克腾旗| 斗六市| 靖州| 临沂市| 洪雅县| 万载县| 腾冲县| 东山县| 长兴县| 三门峡市| 池州市| 洪雅县| 汕尾市| 金湖县| 嘉峪关市| 文水县| 玉溪市| 达孜县| 宁强县| 华亭县| 梁山县| 织金县| 克拉玛依市| 曲阜市| 齐齐哈尔市| 彭阳县| 昌宁县| 江津市| 息烽县| 那曲县| 松滋市| 大港区| 诸城市| 乐陵市| 香河县| 迭部县| 进贤县| 泽库县| 老河口市|