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