蜜桃二区,毒医王妃不好惹免费阅读全文,奶水奶头咂着奶小说,被快递员上门做到高潮,日本巨乳人妻无删减,情爱小说连载,暴躁妹妹csgo,床戏描写多的小说片段,给弟弟的家规

專業(yè)網(wǎng)站建設(shè)B/S軟件開發(fā)專業(yè)微信營銷專業(yè)技術(shù)建設(shè)團隊做客戶滿意度最高的軟件公司
鄭州網(wǎng)站建設(shè)、鄭州網(wǎng)站開發(fā)
 

消息推送設(shè)計原理和規(guī)則

作者:網(wǎng)站建設(shè)出處:學(xué)眾科技發(fā)布時間:2020年10月25日點擊數(shù):2826

推送消息是通過 Apple 和 Google 掌控的互聯(lián)網(wǎng)服務(wù)器發(fā)送的,推送消息從根本上就是設(shè)計用于與應(yīng)用程序通信的,它們可以發(fā)送文本、多媒體文件和特定于應(yīng)用程序的數(shù)據(jù)。那么,消息推送的的設(shè)計原理和規(guī)則是什么?

隨著 iPhone 和安卓手機這類超級手機的興起,現(xiàn)在完全可以繞過運營商,通過標(biāo)準(zhǔn) TCP/IP 網(wǎng)絡(luò)直接向這些手機發(fā)送消息,這些消息就稱為推送消息。

推送消息是通過 Apple 和 Google 掌控的互聯(lián)網(wǎng)服務(wù)器發(fā)送的,推送消息從根本上就是設(shè)計用于與應(yīng)用程序通信的,它們可以發(fā)送文本、多媒體文件和特定于應(yīng)用程序的數(shù)據(jù),例如:警告聲音和顯示在應(yīng)用程序圖標(biāo)上的標(biāo)記等。

推送通知非常適合智能手機應(yīng)用,但與基于運營商的移動消息傳遞相比,它們的普及性和可靠性都較差。

消息推送的分類和方式等,如下圖:

(1)消息提醒的流程

輸入消息》進入消息倉庫》發(fā)送消息》消息流水》消息詳情

(2)消息發(fā)送的時間

  • 一般為上午 9 點- 10 點

  • 中午 12 點- 14 點

  • 下午 5 點- 6 點

  • 晚上 21 點- 22 點

(3)消息推送的類型

  • 優(yōu)惠券到期通知

  • 客服即時消息

  • 抽獎商品到期通知

  • 收藏降價通知

  • 抽獎機會提醒

  • 訂單發(fā)貨提醒

  • 訂單退貨提醒

  • 購物車商品過期通知

  • 拼團到期通知

  • 各大活動通知

(4)消息推送的規(guī)則

移動端獲得消息通知主要有兩種方式:pull(拉)方式和push(推)方式,下面分別對這兩種方式做簡要介紹。

pull方式:

pull方式即“拉方式”,這種方式中手機上的應(yīng)用程序在啟動時及經(jīng)過一定周期會定時連接應(yīng)用的服務(wù)端來獲得服務(wù)器需要傳遞給終端的消息,因為此處是終端從服務(wù)端主動獲得消息,因此稱為拉方式。

此方式服務(wù)端實現(xiàn)簡單,只需要在終端連接上之后把需要發(fā)送的消息發(fā)送給終端即可,但是此方式有如下弊端:

每個應(yīng)用終端都需要建立到自己服務(wù)器的socket連接,移動終端需要維護多個socket連接,較為耗電,不易于治理 。

采納拉的方式,應(yīng)用在啟動的時候會從應(yīng)用的服務(wù)器上拉取消息;啟動之后,應(yīng)用會周期性的連接服務(wù)器去檢查是否有消息需要拉取,這種方式并不實時,需要等到終端主動拉取的時候服務(wù)器才能把消息傳遞到終端。如果應(yīng)用頻繁檢查是否有消息需要拉取,那么耗電會增加,如果檢查周期過長,那么會影響消息的實時性。

綜上,采納pull方式進行通知消息的傳遞并不是一個很好的方法。

push方式:

  • 采納push方式,移動終端只需要和推送服務(wù)器之間保持一個長連接即可。這樣移動終端用于推送的socket連接數(shù)量就與需要推送服務(wù)的應(yīng)用數(shù)量無關(guān)了,只需要維持一個終端與推送服務(wù)器之間的長連接即可,所有應(yīng)用的服務(wù)端都是直接連接推送服務(wù)器并通過推送服務(wù)器來把消息推送到終端。而終端也只與推送服務(wù)器進行連接即可獲得推送的通知消息。

  • 推送服務(wù)器通過長連接,在消息到來的時候可以馬上 把消息推送到連接上來的終端上,實時性比較高。

消息推送示意圖

消息推送系統(tǒng)邏輯設(shè)計圖

此圖中,推送應(yīng)用1,2, 3 為推送應(yīng)用的服務(wù)端,其負責(zé)把需要推送的消息放入推送系統(tǒng)。這些應(yīng)用服務(wù)端通過負載均衡服務(wù)器來連接到具體的推送服務(wù)器。

服務(wù)端是Socket.io的集群,供客戶端(Web、移動端)連接。集群后面是一個Redis服務(wù)器,保存集群中每個節(jié)點(我們稱之為Cluster)連接的客戶端ID。同時Redis里面為每一個Cluster分配了一個隊列,保存推送到這個Cluster的消息。

當(dāng)有消息從某個客戶端發(fā)出后,所連接的Cluster從Redis里面獵取 這個消息的目標(biāo)客戶端ID(由于我們同時支持一對一私聊和群組,因此一條消息可能會被推送到多個客戶端),然后把消息Push到每個Cluster的消息隊列里面。

每一個Cluster都會以堵塞 方式讀取它所對應(yīng)的消息隊列,一旦發(fā)現(xiàn)有消息,就獵取 并且查看其目標(biāo)客戶端ID是不是連接在這個Cluster上。如果是,就通過Socket.io發(fā)送,如果不是就丟棄。然后繼續(xù)堵塞 讀取,直到下一條消息到達。

總結(jié)

其實粗略來講,即時通訊-消息推送只是一種實現(xiàn),比如:你可以用第三方產(chǎn)品,很輕易的就可以實現(xiàn)點對點、甚至點對多的消息收發(fā)。

但是在用戶需求很個性化,比如:我要對用戶的聊天內(nèi)容進行監(jiān)控,涉及到敏感的關(guān)鍵字不讓消息推送出去、或者我要對開通會員的用戶給予“尊貴的身份”。

相比于免費用戶,可以在云端保存時效更久的聊天記錄或者可以添加的好友數(shù)、群數(shù)更多或者無上限,這時候?qū)Χㄖ苹囊缶头浅8?,畢竟?shù)據(jù)是寶貴的。這時候我們就需要自行開發(fā)不能依賴第三方服務(wù)。

沙澧街