消息推送

消息推送

消息推送(即時通訊)

  • 目的:想辦法讓服務器能夠及時通知客戶端
  • 服務器主動發送消息給客戶端(建立服務器端和客戶端建立長鏈接)
  • 應用場景:廣告、即時通信
  • 實現方案:
    • 1、輪詢:客戶端每隔一定的時間就向服務器發出請求,獲得最新的消息
      • 特點:
        • 1、如果應用在最新新聞通知上,則效率較低
        • 2、技術簡單,好實現
      • 應用場景:當服務器端的數據以固定的頻率更新時,比如股票信息,黃金,期貨類似的信息
    • 2、發短信:
      • 特點:效率高,最及時,費用高
      • 應用場景:比較土豪的做法,不差錢
    • 3、使用第三方的開源項目
      • AndroidPN(android push notify)
    • 4、使用第三方的API實現推送功能
      • 百度推送
      • 極光推送
      • 個推
      • 微信推送
  • 實現方式
    • 第3和第4原理上都屬於消息推送
    • 消息推送的實現原理:Socket長鏈接+心跳幀
    • 平常講的java中的Socket通信、Socket鏈接就是短鏈接
    • 長鏈接:服務端和客戶端進行通信,通信完後,Socket沒有關閉,一直處於開啓狀態,服務器和客戶端一直都有一個socket鏈接
    • 但是如果這個長鏈接有一段時間沒用被利用,不用的話,就會被路由器認爲是一個無用的鏈接,那麼很有可能鏈接被斷掉,斷掉後服務器就無法再次找到客戶端,就出現了心跳幀這個概念
    • 心跳幀:每隔一段時間發送一段極短的數據,證明客戶端還活着。驗證socket鏈接還存活着。告訴路由器這個鏈接有效
    • 如果發送消息失敗,服務器將消息暫存起來,一旦檢測到客戶端恢復心跳,就重新發送。

AndroidPN(android push notify)

  • Androidpn :android pushnotification(中文名稱:Android消息推送)。參考這裏

    基於XMPP協議的java開發有一個開源框架,那就是smack,它主要封裝了一些XMPP的實現。在引用smack的基礎上

    實現和服務器端的持久連接,以實現服務器對客戶端的推送,那就是Androidpn。Androidpn在客戶端集成了smack。

    這樣就可以很容易的簡立一個和服務器端的基於xmpp協議的socket連接。所以Androidpn可以說是使用了smack框架

    的開源項目。

  • Androidpn使用好處:

    用Androidpn好處有以下方面:採用完全開放的XMPP協議進行數據傳輸(QQ,MSN,GTalk等都是採用的這種協議)。

    良好的框架支持(專門爲android 而產生的推送框架smack,以及很好的管理socket的框架MINA,都是很成熟的產品);

    完全開放的源代碼(我們可以在Androidpn的基礎上進行修改,來滿足我們的任何需求變更);大大的減少了客戶端的代

    碼,降低了android的開發難度。

  • XMPP網絡協議

    XMPP : The Extensible Messaging andPresence Protocol.

    中文全稱:可擴展通訊和表示協議.

    簡介:可擴展通訊和表示協議 (XMPP) 可用於服務類實時通訊、表示和需求響應服務中的XML數據元流式傳輸。

    XMPP(可擴展消息處理現場協議)是基於可擴展標記語言(XML)的協議,它用於即時消息(IM)以及在線探測。

    它在促進服務器之間的準即時操作。這個協議可能最終允許因特網用戶向因特網上的其他任何人發送即時消息,即

    使其操作系統和瀏覽器不同。

  • XMPP主要顯著的優點主要有以下幾個方面:

    • 1、分佈式 任何人都可以運行自己的XMPP服務器,它沒有主服務器,客戶端簡單

    • 2、安全性很高。使用SASL及TLS等技術的可靠安全性

    • 3、開發性 它是開源的,易於進行學習和了解

    • 4、跨平臺 毋庸置疑,使用的XML數據格式進行傳輸的

    • 5、單臺機器就可以容納20萬個鏈接,非常穩定,支持擴展和自定義
  • XMPP缺點:如果定製的話需要專業的javaEE知識

  • androidPN環境搭建這裏

  • 缺點:但是穩定性差、連接數量有限、目前已經停止維護了;

Socket、HttpUriConnection、HttpClient、HttpUtils之間的關係

  • Socket :JAVA中一切的聯網最終都是Socket聯網
  • HttpUrlConnection:一個工具類,底層還是Socket,最基本的發出聯網請求的工具類
  • HttpClient:HttpClient源碼可以看出它內部也是HttpUrlConnection,不過Android的6.0版本中刪除了的Apache HTTPclient支持。如果您的應用程序正在使用HTTP client和目標版本是Android2.3(API等級9)或更高,使用HttpURLConnection類類來代替HTTP client
  • HttpUtils:Xutils這個開源框架的一個模塊

  • com.wsc.jpushtest

  • JPushTest

消息推送的擴展

應用場景廣泛,實際上只要涉及到服務器要主動地使客戶端被動地收到某一條消息,然後執行相關功能的邏輯全都可以推送來解決

擴展:

  • 客戶端自動的獲取數據,客戶端不主動的調接口,服務端有數據的時候,客戶端就能夠自動收到數據

PS

  • 消息推送(server 端 主動發消息給客戶端)
  • 一、原聲Android支持的消息推送C2DM

    • 1.2012年6月之前C2DM(cloud to device message),依賴google的Gtalk賬號和google服務。
    • 2.國產手機的google服務必須被去掉,工信部規定。
    • 3.國內沒法用,國外可以用。
  • 二、C2DM - > GCM

    • 1.gcm(google cloud 2 message) 是C2DM升級版
    • 2.API相對於C2DM更友好,直觀,根據API提示就可以完成消息推送的過程
    • 3.依賴google的服務
    • 4.GCM目前也不被推薦了
  • 三、第三方的消息推送

    • 1.個信(商業服務收費)
    • 2.巴別塔(商業服務收費)
    • 3.極光推送(商業服務收費)
    • 4.百度推出消息推送(免費,可以百度的消息推送)
  • 四、自己開發

    • 1.XMPP協議,實現XMPP協議來達到消息推送的目的
    • 2.改造OpenFire,達到推送的目的
    • 3.AndroidPN(韓國人寫的項目,spring + struts ),需要自己晚上,保持連接,異常的處理,斷線,上線都有很多bug
    • 4.成本太大,server的開銷很大。
  • 五、server端輪詢

    • 1.客戶端循環的向server端指定的端口發送請求,
    • 2.5s,10s,2m,10m,查看消息,有沒有我的消息?有,取下來,沒有,走人。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章