提起訊息推送一般人們會經常提起的有以下幾種:
1. 輪詢
顧名思義,客戶端定期去向服務端詢問是否有新的訊息,簡單點說就是服務端不關心客戶端的位址是什麼,客戶端來詢問,直接告訴它就行。這種方案最簡單,但是卻不適用於即時通訊產品,因為即時通訊軟體的訊息傳遞機制與一般的訊息推送的區別就在即時這點,如果採用輪詢的方式,客戶端每幾秒就連一次伺服器,對於手機電量與流量的消耗是很大的。
2. xmpp
xmpp是一種基於標準通用標記語言的子集xml的協議,它繼承了在xml環境中靈活的發展性。因此,基於xmpp的應用具有超強的可擴充套件性。經過擴充套件以後的xmpp可以通過傳送擴充套件的資訊來處理使用者的需求,以及在xmpp的頂端建立如內容發布系統和基於位址的服務等應用程式。而且,xmpp包含了針對伺服器端的軟體協議,使之能與另乙個進行通話,這使得開發者更容易建立客戶應用程式或給乙個配好系統新增功能。它的系統結構如下圖所示:
但是它也有兩個致命的缺點:隨著通常超過70%的xmpp協議的伺服器的資料流量的存在和近60%的被重複**,xmpp協議目前擁有乙個大型架空中存在的資料提供給多個收件人。新的議定書正在研究,以減輕這一問題。它的另乙個缺點是由於xmpp協議的方式被編碼為乙個單一的長的xml檔案,因此無法提供修改二進位制資料。
3. mqtt
mqtt(message queuing telemetry transport,訊息佇列遙測傳輸)是ibm開發的乙個即時通訊協議。它的push結構示意圖如下圖所示:
4. 長連線
所謂長連線指建立socket連線後不管是否使用都保持連線。當然有人會問長連線定時傳送心跳,這和輪詢有什麼區別?手機休眠狀態下連線會不會斷掉等。
所以,可以粗略的認為心跳包的乙個作用就是為了解決nat中斷的問題。但是心跳包傳送的間隔時間必須要小於nat超時的時間,這樣才能保證鏈路的不中斷。
下面簡單闡述一下心跳包與輪詢的區別,以此來說明長連線方案比輪詢方案的優勢。輪詢與心跳本質的不同是輪詢的目的是為了從服務端得到資料,而心跳是為了保持連線。而且輪詢比心跳更耗電,輪詢要經過tcp的三次握手,但是單次心跳缺不需要這樣。
最後乙個問題,手機休眠狀態下連線是否會斷掉。這個問題如果詳細討論的話比較複雜,涉及手機ap,bp處理器的處理策略,簡單點說就是tcp資料報能夠喚醒手機。因此長連線是比較適合手機移動端的即時通訊的。
個人簡介:元啟,android高階開發工程師,mobim安卓端主程,曾經參與過多個sdk研發與維護工作。
IM客戶端訊息推送的幾種方式及特點
提起訊息推送一般人們會經常提起的有以下幾種 1.輪詢 顧名思義,客戶端定期去向服務端詢問是否有新的訊息,簡單點說就是服務端不關心客戶端的位址是什麼,客戶端來詢問,直接告訴它就行。這種方案最簡單,但是卻不適用於即時通訊產品,因為即時通訊軟體的訊息傳遞機制與一般的訊息推送的區別就在即時這點,如果採用輪詢...
伺服器向客戶端推送訊息的幾種方式
controller public class showtimecontroller responsebody public string gettime controller 記得要在webinitializer中增加servlet.setasyncsupported true public cl...
客戶端服務端訊息推送模組設計
業務需要,客戶端上需要加上訊息推送模組,大概功能就是使用者充值或者觸發了一些操作,伺服器需要主動推送通知到對應的使用者。常用的訊息推送,技術上大致分為兩類 1 客戶端主動拉取類 採用這種的話,服務端開發比較輕鬆,只需要提供乙個查詢api,客戶端ajax定時拉取即可,稍微好點的ajax長輪詢拉取。弊端...