日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

消息推送技术

發布時間:2024/8/24 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 消息推送技术 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:http://88250.b3log.org/web-message-push

消息推送技術

消息推送

消息推送是針對 Web 應用開發領域的技術,指服務端以主動方式將信息送達客戶端。主要用于提升用戶體驗,避免用戶刷新頁面從服務端拉取數據。例如 Web 郵件中自動出現剛收到的郵件項,Web 即時通訊自動提示新到消息等應用場景。

要實現消息推送機制,涉及兩方面的內容:

  • Web 層消息推送
  • 服務層消息服務

Web 層消息推送

套接字

可以使用套接字接口進行全雙工通訊??梢酝ㄟ^ Flash XMLSocket、Java Applet 技術實現。
但由于實現方案與廠商技術綁定過緊,不屬于 Web 標準化范疇,并且存在一些限制(通訊端口開啟安全、客戶端插件),這里不進行描述。

HTTP 請求輪詢

目前的 Web 應用是基于 HTTP 協議的,其規定了請求-響應的處理模型,位于應用層的單工通訊模式使得純粹意義上的服務端推送方式變得難以實現。

為了基于 HTTP 協議進行“推送”實現,可由客戶端發起 HTTP 請求輪詢,服務端在請求后返回響應。

根據輪詢時間、請求處理方式,分為以下三種推。

簡單輪詢

客戶端一般以定時方式發起請求,服務端處理后返回響應。

  • 原理、客戶端/服務端實現簡單
  • 可根據應用場景調整輪詢時間間隔
  • 服務端需要處理大量請求

長輪詢

客戶端發起請求后服務端將該請求掛起(不返回響應),直到超時、異?;蛐枰幚眄憫?#xff08;推內容)才返回??蛻舳耸盏巾憫笤俅握埱?#xff08;即輪詢)服務端,并處理響應。

  • 實時性高
  • 服務端需要管理掛起請求

HTTP 流

客戶端發起請求后服務器端處理請求,并通過 HTTP 流一直向客戶端寫入數據,直到超時或異常才返回響應。連接斷開后客戶端再次請求服務端,屬于長輪詢的一種。

HTML 5 WebSocket

這是標準化的客戶端全雙工通訊規范,但由于目前服務端規范尚未成型,且考慮到現有客戶端對 HTML 5 的支持有限,這里不進行描述。

多客戶端支持

上述介紹是針對瀏覽器客戶端的,在實際應用場景中,還需要考慮其他客戶端支持,例如 iOS、Android 等。

在移動客戶端方面,需要考慮如下幾點。

APIs 多樣

不同客戶端本地 APIs 接口存在差異,但都支持基本的 HTTP 協議。直接基于 HTTP 協議進行開發可將差異最小化。

網絡連接不穩定

通訊信道打開后不一定能長時間維護,客戶端與服務端的狀態管理復雜。

最小化流量

需要盡量最小化網絡流量,提升移動客戶端可用性。

服務層消息服務

消息是系統或組件間通訊的一種低耦合方式,是系統級異步架構的基礎。

在 Web 消息推送中,服務端管理應用狀態,當狀態發生變遷時需要通知客戶端,完成消息推送。

Java Message Service

需要重點關注如下技術點:

消息域

  • 點對點只有一個客戶端可以接收到消息。


  • 發布/訂閱
    廣播給訂閱的客戶端。可配置持久化訂閱。

消息確認

  • 會話本地事務提交時會對收到的消息進行確認,回滾時將重傳所有消息
  • 非本地事務確認:Session.AUTO_ACKNOWLEDGE、Session.CLIENT_ACKNOWLEDGE、Session.DUPS_OK_ACKNOWLEDGE

技術設計

目標

  • 支持瀏覽器客戶端的推送
  • 高性能、高可靠
  • 模塊化,不與應用耦合
  • 未來可支持多種移動客戶端

Web 層設計

Web 層考慮采用開源組件?Pushlets?進行實現。

Pushlets 組件

Pushlets 基于 HTTP 協議的發布/訂閱模型,提供了 Poll(輪詢)、Pull(拉)兩種推方式實現。其中 Pull 即長輪詢方式,當有消息時就返回。

  • 發布:GET/POST 或方法調用ethod call(Dispatcher 接口)
  • 訂閱:GET 流,拉/輪詢模式
  • 樹形主題:可層次化訂閱
  • 協議格式:JS,XML(JSON 尚未支持)
  • 對使用 HTTP 協議的客戶端都可用
  • 易擴展:例如事件源實現
  • 方便整合:可獨立為 Web 應用,也可為 Web 應用組件
  • 多種實現:J2EE/servlets,JavaScript (AJAX)

JS 客戶端

  • js-pushlet-client.js
    • 使用 “隱藏 iframe 技巧”
    • 格式:JavaScript 函數事件
  • ajax-pushlet-client.js
    • 使用 XMLHttpRequest
    • 格式:XML
    • 不支持 HTTP 流

使用 AJAX 客戶端,較為靈活,便于封裝。

服務層設計

服務層消息服務采用應用服務器 JMS 中間件。通過發布/訂閱模型實現狀態同步。

處理步驟

  • 配置主題訂閱
  • 應用狀態變遷時發布 JMS 消息
  • JMS 消息監聽器將監聽到的消息發布到 Pushlets
  • 將該消息寫入 Web 層消息表
  • 消息表

    保存推送多的消息記錄,用于客戶端刷新時/多客戶端查找消息。

    userId

    createdTime

    lastGetTime

    clients

    msg

    type

    timeout

    targetSys

    srcSys

    ….

    ?

    xxx

    xxx

    xxx

    [“pc”, “iOS”]

    {}

    公告

    3天

    OA

    OA

    ??

    消息體使用 JSON 字符串存放于 msg 字段中。其余字段可根據通用性進行抽取,比如用戶名等。

    消息監聽器接收到消息時推 Pushlets,并進行記錄寫入(記錄 lastGetTime 為寫入時間,表示這條消息已經推送過)。

    設置定時任務對超時記錄進行刪除。

    邏輯架構

    JMS 消息系統為單獨的通訊總線服務獨立于應用系統,Pushlets 為應用系統中的一個組件。

    消息表管理組件提供消息新增,以及對推送過的消息記錄的查詢、刪除。

    推時序

    關鍵點

    • 服務層消息監聽
    • 消息表管理
    • Pushlets 配置,License 問題:Pushlets 是以 LGPL 開源的,對于商業項目使用時必須進行封裝
    • 前端容錯開關

    參考

    • Comet:基于 HTTP 長連接的“服務器推”技術
    • 初探 HTML 5 之 WebSocket
    • Pushlets 官網
    • The JavaEE 6 Tutorial - Java Message Service
    • 《JMS 規范教程》
    原文:?《消息推送技術》via Google Docs

    轉載于:https://www.cnblogs.com/tommyli/p/3948707.html

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的消息推送技术的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。