国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
消息推送技術(shù)

消息推送

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

要實現(xiàn)消息推送機制,涉及兩方面的內(nèi)容:

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

Web 層消息推送

套接字

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

HTTP 請求輪詢

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

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

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

簡單輪詢

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

  • 原理、客戶端/服務端實現(xiàn)簡單
  • 可根據(jù)應用場景調(diào)整輪詢時間間隔
  • 服務端需要處理大量請求

長輪詢

客戶端發(fā)起請求后服務端將該請求掛起(不返回響應),直到超時、異?;蛐枰幚眄憫ㄍ苾?nèi)容)才返回??蛻舳耸盏巾憫笤俅握埱螅摧喸儯┓斩耍⑻幚眄憫?。

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

HTTP 流

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

HTML 5 WebSocket

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

多客戶端支持

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

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

APIs 多樣

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

網(wǎng)絡連接不穩(wěn)定

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

最小化流量

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

服務層消息服務

消息是系統(tǒng)或組件間通訊的一種低耦合方式,是系統(tǒng)級異步架構(gòu)的基礎。

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

Java Message Service

需要重點關(guān)注如下技術(shù)點:

消息域

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


  • 發(fā)布/訂閱
    廣播給訂閱的客戶端??膳渲贸志没嗛?。

消息確認

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

技術(shù)設計

目標

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

Web 層設計

Web 層考慮采用開源組件 Pushlets 進行實現(xiàn)。

Pushlets 組件

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

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

JS 客戶端

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

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

服務層設計

服務層消息服務采用應用服務器 JMS 中間件。通過發(fā)布/訂閱模型實現(xiàn)狀態(tài)同步。

處理步驟

  1. 配置主題訂閱
  2. 應用狀態(tài)變遷時發(fā)布 JMS 消息
  3. JMS 消息監(jiān)聽器將監(jiān)聽到的消息發(fā)布到 Pushlets
  4. 將該消息寫入 Web 層消息表

消息表

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

userId

createdTime

lastGetTime

clients

msg

type

timeout

targetSys

srcSys

….

 

xxx

xxx

xxx

[“pc”, “iOS”]

{}

公告

3天

OA

OA

  

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

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

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

邏輯架構(gòu)

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

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


推時序

關(guān)鍵點

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

參考

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Android消息推送完美方案
Android 幾種消息推送方案總結(jié)
WebSocket是什么原理?為什么可以實現(xiàn)持久連接?
芋頭的故事 : Weblog
搭建信息推送平臺:Gotify安裝配置
JAVA 基于websocket實時通信的實現(xiàn)
更多類似文章 >>
生活服務
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服