姜淑芳 雍寧 葛華森
【摘要】 “服務器推送技術”是最近Web技術中最熱門的一個流行術語。它也是繼“Ajax”之后又一個倍受追捧的Web技術。該技術最近的流行跟“Ajax ”也有著密切的關系。隨著 Ajax技術的興起,這讓廣大的web開發(fā)人員又一次看到了使用瀏覽器來替代桌面應用的大好機會,并且這次機會非常大。Ajax將整個頁面的刷新變成頁面局部的刷新,并且數據的傳送是以異步方式進行。
【關鍵詞】 Web 消息推送 消息推送技術 服務器 消息服務 Ajax
一、引言
很多應用譬如信息檢測監(jiān)控、即時通信功能、即時報價信息系統(tǒng)都需要將后臺發(fā)生的變化實時傳送到前段客戶端而無須客戶端不停地刷新、發(fā)送請求。本文主要介紹了Web層的消息推送和服務層的消息服務業(yè)務,消息推送介紹了套接字、HTTP請求輪詢及其各種原理、Html5還有多客戶端兼容性支持,服務層的消息推送業(yè)務里介紹了消息域和消息確認模塊。
二、Web 層的消息推送
2.1 套接字
套接字可以使用接口來進行全雙工的通訊。也就是可以通過 Flash XMLSocket、Java Applet 技術實現。但是由于有的時候實現方案與商業(yè)中技術綁定過緊,此不能屬于Web 標準化范圍,而且還存在一些定的限制,這里不細述。
2.2 HTTP 請求-輪詢
當前的 Web 應用業(yè)務都是基于 HTTP 協議實現的,HTTP協議就規(guī)定了那種通過請求來反應的處理模式,而在應用層的單工通訊模式對于實現真正的服務器推送方式又變得難了。為了基于 HTTP 協議進行“推送”實現,可由客戶端發(fā)起 HTTP 請求輪詢,服務端在請求后返回響應。根據輪詢的執(zhí)行時間、請求的處理方式,分為以下輪詢方式:
簡單輪詢方式原理:客戶端一般會以定時的方式發(fā)起請求,服務端接到請求后返回響應消息。
輪詢原理、客戶端/服務端的簡單實現;
可以根據應用的場景調整輪詢時間的間隔;
服務端需要即時處理大量的請求。
長輪詢方式原理:客戶端在發(fā)起請求了之后服務端將該請求掛起(也就是暫時不響應),直到超時、異常或需要處理響應(推送消息內容)時才返回響應。然后,客戶端在收到響應后再次輪詢(也就是請求)到服務端,同時開始處理其響應。
此原理的實時性較高;
服務端需要在必要時管理掛起請求。
HTTP 流方式原理:客戶端發(fā)起請求后在服務器端處理請求,并且通過 HTTP 流的方式一直向客戶端寫入數據消息,直到超時或異常才返回給服務器響應。在連接斷開后客戶端會再次和多次請求到服務端,這也就屬于長輪詢方式的一種。
2.3 HTML 5 - WebSocket
這是標準化的客戶端使用全雙工通訊的規(guī)范,但由于目前的服務器端規(guī)范還沒有形成一個真正的規(guī)范型,且大部分瀏覽器對新的 HTML5的兼容性還是有限的,這里不再敘述。
2.4 多客戶端支持
上述介紹是針對瀏覽器端的,而在實際應用場景中,還需要考慮其他客戶端兼容性,例如 IOS、Android,甚至Linux等系統(tǒng)。在移動客戶端也就是軟件方面,需要考慮如下幾點:APIs 的多樣性:不同的客戶端在本地 APIs 接口逗存在不同樣子的差異,但基本都支持最基本的 HTTP 協議,因為這是一個基礎,而且直接用基于 HTTP 協議進行開發(fā)的可以將差異變小。網絡連接不穩(wěn)定性:通信道打開后不一定能長時間維護,客戶端、服務端的狀態(tài)管理比較復雜。最小化的流量:需要盡量的最小化網絡流量需求,提升移動客戶端的持續(xù)可用性。
三、服務層的消息服務
消息是指系統(tǒng)或組件間通訊的一種低耦合的模式,是系統(tǒng)級的異步架構的基礎元素。在 Web 消息推送中,服務端管理應用狀態(tài),當其狀態(tài)發(fā)生了變化時需發(fā)送到客戶端,完成消息的推送。Java Message Service中需要重點關注如下技術點:消息域模塊:點對點——有且只有一個客戶端可以通過消息域接收到消息。發(fā)布/訂閱——通過發(fā)布給已經訂閱的客戶端??膳渲贸沙志没挠嗛?。消息確認模塊:會話在本地事務在提交的時候會對接收數據來進一步的確定,回滾的時候將重傳所有的消息,達到消息確認的目的。非本地事務確認方法是:Session.AUTO_ACKNOWLEDGE、Session.CLIENT_ACKNOWLEDGE、Session.DUPS_OK_ ACKNOWLEDGE
總結 :本文介紹了如何在現有的web消息推送技術基礎上選擇合適的方案開發(fā)一個“服務器推”的應用,最優(yōu)的方案還是取決于應用需求的本身。相對于傳統(tǒng)的 Web 應用, 目前熱門開發(fā) Comet 應用還是有一定的挑戰(zhàn)性的。需求推動技術的發(fā)展,相信 Comet 的應用會變得和 AJAX 一樣普及。
參 考 文 獻
[1] 陳航,趙方. 基于服務器推送技術和XMPP的WebIM系統(tǒng)實現[J]. 計算機工程與設計. 2010(05)
[2] C.J.Date著,數據庫系統(tǒng)導論(第七版). 機械工業(yè)出版社
[3] Stephens著,數據庫設計. 機械工業(yè)出版社
[4] 周婷,Comet:基于 HTTP 長連接的“服務器推”技術. http://www.ibm.com/developerworks/cn/web/wa-lo-comet/