999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Pushlet框架改進(jìn)及其應(yīng)用整合

2012-05-12 02:47:40李賽男余金山
關(guān)鍵詞:用戶

李賽男 ,余金山

(1.華僑大學(xué) 計(jì)算機(jī)科學(xué)與計(jì)算學(xué)院,福建 廈門 361021;2.華僑大學(xué) 計(jì)算機(jī)科學(xué)與計(jì)算學(xué)院,福建 泉州 362011)

一些實(shí)時(shí)監(jiān)控、在線即時(shí)通信、RIA的Web應(yīng)用等系統(tǒng)狀態(tài)發(fā)生變化時(shí)需要及時(shí)反饋數(shù)據(jù)給客戶端。這種實(shí)時(shí)交互可以利用推技術(shù)來(lái)實(shí)現(xiàn)。隨著Ajax技術(shù)的興起,系統(tǒng)的實(shí)時(shí)性也出現(xiàn)新的解決方案——服務(wù)器推送(Comet[1])。服務(wù)器推送不同于以往的推技術(shù),它是基于Web平臺(tái)、通過(guò)Http長(zhǎng)連接、無(wú)須安裝插件的服務(wù)器向客戶端推送數(shù)據(jù)的純?yōu)g覽器技術(shù)。

服務(wù)器推送是通過(guò)保持客戶端與服務(wù)器端的Http連接,當(dāng)服務(wù)器端狀態(tài)發(fā)送變化時(shí),將數(shù)據(jù)發(fā)送給客戶端瀏覽器,由瀏覽器負(fù)責(zé)顯示這些數(shù)據(jù),然后連接繼續(xù)被維持,等待下一次服務(wù)器推送[2]。

Pushlet是一種輕量級(jí)的服務(wù)器推送開(kāi)源框架,相對(duì)于其他流行的推送框架如Dojo+Jetty、DWR等,Pushlet有以下優(yōu)點(diǎn):

(1)通用性。Pushlet框架是基于 Servlet實(shí)現(xiàn)的,可以在任何一種支持Servlet的服務(wù)器上運(yùn)行。

(2)簡(jiǎn)單易用。Pushlet提供了一組簡(jiǎn)明用戶接口,使用戶能方便地使用Pushlet框架,而且客戶端使用Java Script技術(shù),可以很容易與已有的Web應(yīng)用程序集成。

(3)可配置性。Pushlet使用屬性文件配置框架中的各種組件,用戶可以用自己開(kāi)發(fā)的組件替換Pushlet提供的組件。

(4)擴(kuò)展性。對(duì)于比較復(fù)雜的推送應(yīng)用,用戶可以自由擴(kuò)展Pushlet框架。

(5)協(xié)議簡(jiǎn)單。Pushlet的客戶端和服務(wù)器端交互采用的協(xié)議是經(jīng)過(guò)簡(jiǎn)化的bayeux協(xié)議。

但是Pushlet主要關(guān)注Comet服務(wù)器端的實(shí)現(xiàn),相對(duì)其在數(shù)據(jù)傳輸和客戶端方面設(shè)計(jì)實(shí)現(xiàn)上存在一些不足:

(1)Pushlet使用的數(shù)據(jù)傳輸格式只能存儲(chǔ)結(jié)構(gòu)簡(jiǎn)單的消息數(shù)據(jù)。

(2)客戶端只能連接一個(gè)Pushlet服務(wù)器。

針對(duì)上述不足,本文提出使用JSON格式存儲(chǔ)服務(wù)器發(fā)送的數(shù)據(jù),在創(chuàng)建Pushlet服務(wù)器連接方面,使用OOP思想把連接封裝成類,以便多次創(chuàng)建連接對(duì)象連接多個(gè)Pushlet服務(wù)器。

1 Pushlet的主要技術(shù)

Pushlet是Comet的開(kāi)源框架,它提供基于Ajax長(zhǎng)輪詢方式和基于iframe的流方式兩種的服務(wù)器推送實(shí)現(xiàn)[3]。整個(gè)框架涉及服務(wù)器端以及客戶端的實(shí)現(xiàn)。服務(wù)器端采用Servlet技術(shù)監(jiān)聽(tīng)客戶端請(qǐng)求,客戶端采用JavaScript技術(shù)并實(shí)現(xiàn)跨瀏覽器實(shí)現(xiàn)。Pushlet服務(wù)器端框架和客戶端框架基于 Pushlet協(xié)議,協(xié)議示意圖分別如圖1、圖 2所示。

圖1 Ajax長(zhǎng)輪詢模式的Pushlet交互協(xié)議

圖2 streaming模式的Pushlet交互協(xié)議

Pushlet協(xié)議[4]組成:

(1)會(huì)話管理:客戶端發(fā)送 “join”請(qǐng)求建立一個(gè)Pushlet會(huì)話,以后服務(wù)器通過(guò)這個(gè)會(huì)話管理該客戶端的所有請(qǐng)求。客戶端發(fā)送“l(fā)isten”請(qǐng)求來(lái)監(jiān)聽(tīng)并準(zhǔn)備接收服務(wù)器端的數(shù)據(jù)。Pushlet還提供了一個(gè)快捷請(qǐng)求“joinlisten”合并這兩步請(qǐng)求。客戶端發(fā)送的“l(fā)eave”請(qǐng)求用來(lái)斷開(kāi)會(huì)話。

(2)主題訂閱:客戶端通過(guò)“subscribe”請(qǐng)求向服務(wù)器訂閱一個(gè)或多個(gè)主題,告訴服務(wù)器如果這個(gè)主題的狀態(tài)發(fā)生改變了就告訴我。客戶端也可以通過(guò)“unsubscribe”來(lái)取消一個(gè)或多個(gè)主題的訂閱。

(3)消息發(fā)布:客戶端可以通過(guò)發(fā)送“publish”請(qǐng)求讓服務(wù)器廣播或多播它的消息。

(4)數(shù)據(jù)推送:服務(wù)端通過(guò)發(fā)送“data”消息向客戶端推送數(shù)據(jù)。

(5)心跳消息:在連接快超時(shí)時(shí),服務(wù)器向發(fā)送“heartbeat”消息說(shuō)明會(huì)話還存活,以防瀏覽器請(qǐng)求超時(shí)。

(6)刷新消息:在 Ajax長(zhǎng)輪詢的模式下,服務(wù)器每次有數(shù)據(jù)返回消息給客戶端、發(fā)送心跳信號(hào)、返回listen-ack時(shí),都必須再發(fā)送一條refresh消息給客戶端,告訴客戶端在多長(zhǎng)時(shí)間后發(fā)送“refresh”請(qǐng)求重新建立連接以保持長(zhǎng)Http連接。

為加強(qiáng)協(xié)議的可靠性,客戶端向服務(wù)器端發(fā)送的控制請(qǐng)求,服務(wù)器都會(huì)返回相應(yīng)的ack消息。Pushlet靠?jī)蓷lHttp連接與服務(wù)器交互:一條是專門發(fā)送控制請(qǐng)求;另外一條則是專門接收數(shù)據(jù)的長(zhǎng)連接,這個(gè)長(zhǎng)連接是以“l(fā)isten”請(qǐng)求開(kāi)始的。

Pushlet整體框架如圖3所示[5]。

圖3 Pushlet整體框架圖

2 Pushlet框架的不足與改進(jìn)

2.1 數(shù)據(jù)傳輸格式的不足與改進(jìn)

Pushlet框架中基于Ajax長(zhǎng)輪詢的客戶端框架從服務(wù)器端獲得的是XML格式的數(shù)據(jù),其格式是<event消息字段="字段值".../>,具體示例如下:

Pushlet雖然使用了具有強(qiáng)大數(shù)據(jù)描述能力的XML來(lái)存儲(chǔ)推送的數(shù)據(jù),可是它只是簡(jiǎn)單地利用元素的屬性來(lái)存儲(chǔ)鍵/值對(duì)格式的消息數(shù)據(jù),類似HTTP GET請(qǐng)求的 QueryString, 如 :p_event=join-listen-ack&p_mode=pull&p_time=1321791777&p_id=qegagopapu。 這種 鍵/值 對(duì)的數(shù)據(jù)格式只能存儲(chǔ)簡(jiǎn)單信息,不易存儲(chǔ)額外的復(fù)雜數(shù)據(jù)。如上述例子中從服務(wù)器獲得的數(shù)據(jù)相當(dāng)于服務(wù)器使用XML格式傳送Pushlet協(xié)議的頭部信息,而復(fù)雜的實(shí)際數(shù)據(jù)很難使用這種鍵/值的格式存儲(chǔ)。

對(duì)于上述Pushlet的局限性,可以使用JSON進(jìn)行數(shù)據(jù)傳輸。按照Ajax的定義,原則上應(yīng)該采用傳統(tǒng)的XML數(shù)據(jù)傳輸格式。可是XML是一種結(jié)構(gòu)化的文檔,在服務(wù)器和客戶端均需要進(jìn)行手工解析[6]。這種方案不僅存在解析時(shí)的復(fù)雜性問(wèn)題,而且對(duì)于不同瀏覽器存在兼容性問(wèn)題。此外,XML使用的標(biāo)簽會(huì)產(chǎn)生大量的數(shù)據(jù)冗余減低數(shù)據(jù)傳輸效率。相對(duì)地JSON是一種輕量級(jí)的數(shù)據(jù)交換格式,它是JavaScript規(guī)范的子集,本質(zhì)上就是JavaScript的復(fù)合對(duì)象。所以JSON易于被瀏覽器解析和生成,也可以表示非常復(fù)雜的數(shù)據(jù)。故本文選擇JSON作為數(shù)據(jù)傳輸格式,把服務(wù)器傳送的數(shù)據(jù)使用JSON格式傳輸,具體如下:

2.2 客戶端框架的不足與改進(jìn)

基于Ajax長(zhǎng)輪詢的Pushlet客戶端框架還有一個(gè)局限就是一個(gè)客戶端只能和一個(gè)Pushlet服務(wù)交互。這個(gè)客戶端框架使用JavaScript函數(shù)式編程,只能定義Window的一個(gè)全局變量建立一個(gè)會(huì)話與Pushlet服務(wù)端交互。為使客戶端可以創(chuàng)建多個(gè)會(huì)話與多個(gè)Pushlet服務(wù)端交互,本文使用面向?qū)ο蠓椒ǚ庋b已有的框架創(chuàng)建會(huì)話類,這樣就可以定義多個(gè)會(huì)話對(duì)象創(chuàng)建多個(gè)連接。

改進(jìn)后客戶端框架中各個(gè)類實(shí)例之間的交互如圖4所示。

(1)Session: 會(huì) 話 管 理 類 , 包 含 Pushlet服 務(wù) 端 的URI、會(huì)話ID、會(huì)話狀態(tài)。用戶可以通過(guò)Session對(duì)象進(jìn)行命令請(qǐng)求。對(duì)于接收到消息后的處理函數(shù),則可以通過(guò)配置對(duì)象在創(chuàng)建Session實(shí)例時(shí)指定。

(2)Check:狀態(tài)驗(yàn)證類,驗(yàn)證當(dāng)前會(huì)話狀態(tài)保證正確的協(xié)議時(shí)序。

(3)Control:消息路由類,根據(jù)接收到消息分發(fā)給相應(yīng)的消息處理函數(shù)。

(4)Ajax:異步通信類,封裝 Ajax功能直接與服務(wù)器端通信。

(5)PushletEvent:Pushlet事件類,負(fù)責(zé)解析事件消息和生成事件。

圖4 改進(jìn)后的客戶端框架時(shí)序圖

使用JSON進(jìn)行數(shù)據(jù)交互,相應(yīng)地在服務(wù)器端也需要有一個(gè)JSON數(shù)據(jù)發(fā)送器。Pushlet的服務(wù)器端框架提供了一個(gè)專門用于向客戶端發(fā)送數(shù)據(jù)的ClientAdapter接口,這個(gè)JSON數(shù)據(jù)發(fā)送器就必須實(shí)現(xiàn)這個(gè)ClientAdapter接口。另外還需在Command類的createClientAdapter方法中增加一個(gè)判斷來(lái)生成JSON數(shù)據(jù)發(fā)送器的實(shí)例。

3 在Web投票系統(tǒng)中應(yīng)用

3.1 總體描述

以往大部分的Web投票系統(tǒng)都只是實(shí)現(xiàn)最基本的功能:發(fā)起投票和投票并評(píng)論,如QQ群社區(qū)的群投票。在有些決策性投票中,用戶希望能看到投票的實(shí)時(shí)情況。為此用戶必須時(shí)刻刷新頁(yè)面才能看到投票的最新情況。本文應(yīng)用改進(jìn)的Pushlet框架技術(shù)實(shí)現(xiàn)的Web投票系統(tǒng),是在基本的投票應(yīng)用功能上增加顯示實(shí)時(shí)投票情況的功能。

投票Web應(yīng)用主要分5個(gè)模塊:發(fā)起投票模塊、投票查詢模塊、投票模塊、登錄/注冊(cè)模塊、網(wǎng)站狀態(tài)模塊。該應(yīng)用只有注冊(cè)用戶才可以發(fā)起投票,投票可以分為匿名投票和實(shí)名投票。投票查詢又分一般查詢、過(guò)期投票查詢、未過(guò)期投票查詢、用戶參與的投票和用戶發(fā)起的投票。投票模塊需要顯示各個(gè)候選項(xiàng)的投票比例和用戶的投票留言。網(wǎng)站狀態(tài)模塊則是顯示網(wǎng)站的基本信息,如注冊(cè)的用戶、總發(fā)起投票的個(gè)數(shù)等。本應(yīng)用的實(shí)現(xiàn)使用了SSH2框架,網(wǎng)站前臺(tái)實(shí)現(xiàn)使用Ext JS框架,服務(wù)器推送部分使用Pushlet框架。投票Web應(yīng)用的總體架構(gòu)如圖5所示。

圖5 投票Web應(yīng)用的架構(gòu)

3.2 部分具體實(shí)現(xiàn)

為進(jìn)一步說(shuō)明改進(jìn)的Pushlet框架技術(shù)的具體應(yīng)用,下面給出系統(tǒng)的某些部分的實(shí)現(xiàn)。系統(tǒng)的實(shí)時(shí)性需求有如下兩點(diǎn):(1)當(dāng)有用戶注冊(cè)或發(fā)起投票后,該應(yīng)用的基本信息就會(huì)改變,這時(shí)服務(wù)器就需要推送該應(yīng)用最新的基本信息給客戶端;(2)當(dāng)用戶投票成功后,該項(xiàng)投票的候選項(xiàng)的票數(shù)比例會(huì)改變,而且也會(huì)有新的投票留言,這時(shí)服務(wù)器也需要推送該項(xiàng)投票的最新信息給客戶端。

Pushlet通過(guò)主題來(lái)管理所有需要推送的數(shù)據(jù)。主題采用具有層次的樹(shù)形結(jié)構(gòu),上層主題包含下層主題,類似文件系統(tǒng)的目錄,如/system/time、/system/tem 就 表 示兩個(gè)主題。如果訂閱主題為“/system”,則表示同時(shí)訂閱了/system下的所有子主題 (/system/time和/system/tem);如果訂閱主題為“/”的根主題,則表示訂閱了服務(wù)器里所有的主題。

該應(yīng)用中主要有兩個(gè)大主題:網(wǎng)站最新基本信息和投票最新信息,分別用“/vote/basic”和“/vote/info”表示主題。網(wǎng)站基本信息包括多個(gè)項(xiàng)目,如用戶注冊(cè)人數(shù)、發(fā)起投票總個(gè)數(shù)等,這些信息按項(xiàng)目名稱劃分主題:“/vote/basic/項(xiàng)目名稱”。用戶可能同時(shí)進(jìn)行多項(xiàng)投票,投票最新信息按照投票 ID劃分主題:“/vote/info/投票 ID”。每個(gè)客戶端都必須訂閱“/vote/basic”主題,在打開(kāi)一個(gè)投票表單時(shí)需要訂閱“/vote/info/該投票ID”主題。

圖6是客戶端與服務(wù)器直接交互的具體情況。當(dāng)有新用戶注冊(cè)時(shí),服務(wù)器會(huì)向其他客戶端推送網(wǎng)站的注冊(cè)用戶數(shù)的基本信息。當(dāng)有用戶確定投票時(shí),服務(wù)器也會(huì)推送投票的最新情況。

該應(yīng)用的客戶端是基于Ext JS框架并使用經(jīng)典的MVC模式和命名空間來(lái)組織代碼。Ext控件的配置和布局放在視圖包,Ext的事件處理函數(shù)和Pushlet客戶端框架放在控制包,Ext控件的Store和數(shù)據(jù)模型Model放在數(shù)據(jù)模型包。為與Ext異步調(diào)用的技術(shù)一致,Pushlet框架的客戶端選用基于Ajax長(zhǎng)輪詢的方式。這里使用JSON數(shù)據(jù)方式傳送,引用的框架庫(kù)文件是改進(jìn)后的框架庫(kù)文件。該應(yīng)用的服務(wù)器端則需要在調(diào)用相關(guān)邏輯層服務(wù)后調(diào)用Pushlet的分發(fā)函數(shù),向客戶端推送數(shù)據(jù)。具體服務(wù)器端組件間的交互如圖7所示。

圖6 客戶端與服務(wù)器的交互

圖7 服務(wù)器端各組件之間的交互

Pushlet框架在該應(yīng)用中的集成步驟如下:

(1) 把 pushlet.jar復(fù)制到 WebRootWEB-INFlib下,并添加進(jìn)classpath。

(2)把pushlet.properties和sources.properties復(fù)制到WebRootWEB-INF下。pushlet.properties是Pushlet的配置文件,本應(yīng)用中沒(méi)有用到數(shù)據(jù)源,需要把sources.activate的值設(shè)為false。

(3)把Pushlet改進(jìn)后的客戶端框架的文件Ajax-pus hlet-client-json.js復(fù)制到WebRoot下的一個(gè)lib文件中。

本文對(duì)Pushlet框架的一些不足做了改進(jìn)。但是Pushlet的實(shí)現(xiàn)方式使服務(wù)器必須維護(hù)很多連接,因此對(duì)服務(wù)器性能要求很高。對(duì)此服務(wù)器可以選擇經(jīng)過(guò)性能改進(jìn)的Jetty服務(wù)器。Pushlet這種長(zhǎng)連接的推技術(shù)僅適合用于中小型的應(yīng)用。本文中的投票Web應(yīng)用也是基于一定群體用戶的投票行為。

[1]Alex Russell.Comet: low latency data for the browser[EB/OL].[2006-06].http://alex.dojotoolkit.org/?p=545.

[2]孫清國(guó),朱瑋,劉華軍,等.Web應(yīng)用中的服務(wù)器推送技術(shù)研究綜述[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2008(11):116-120.

[3]陳航,趙方.基于服務(wù)器推送技術(shù)和XMPP的Web IM系統(tǒng)實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2010,31(5):925-928.

[4]BROECKE J V D.Pushlets-protocol specification[EB/OL].[2006-05-25].http://www.pushlets.com/doc/protocol-all.html.

[5]yxw246.Pushlet 2.0.3源碼分析 (服務(wù)器端)[EB/OL].[2008-05-08].http://blog.csdn.net/yxw246/article/details/2418255.

[6]張濤,黃強(qiáng),毛磊雅,等.一個(gè)基于 JSON的對(duì)象序列化算法[J].計(jì)算機(jī)工程與應(yīng)用,2007,43(15):98-100.

猜你喜歡
用戶
雅閣國(guó)內(nèi)用戶交付突破300萬(wàn)輛
車主之友(2022年4期)2022-08-27 00:58:26
您撥打的用戶已戀愛(ài),請(qǐng)稍后再哭
關(guān)注用戶
商用汽車(2016年11期)2016-12-19 01:20:16
關(guān)注用戶
商用汽車(2016年5期)2016-11-28 09:55:15
兩新黨建新媒體用戶與全網(wǎng)新媒體用戶之間有何差別
關(guān)注用戶
商用汽車(2016年6期)2016-06-29 09:18:54
關(guān)注用戶
商用汽車(2016年4期)2016-05-09 01:23:12
挖掘用戶需求尖端科技應(yīng)用
Camera360:拍出5億用戶
100萬(wàn)用戶
主站蜘蛛池模板: 中文字幕啪啪| 国产99热| 巨熟乳波霸若妻中文观看免费 | 国产精品观看视频免费完整版| 国产99免费视频| 成人在线亚洲| 国产欧美精品一区二区| 国产免费精彩视频| 亚洲欧美在线精品一区二区| 精品免费在线视频| 国产精品99久久久| 国产午夜福利在线小视频| 狠狠色香婷婷久久亚洲精品| 青青青国产精品国产精品美女| 美女裸体18禁网站| 91成人免费观看在线观看| 国产精品无码一区二区桃花视频| 精品无码国产一区二区三区AV| 成年人视频一区二区| 亚国产欧美在线人成| 91亚洲精选| 日韩毛片在线视频| 欧美日本视频在线观看| 精品成人一区二区| 日本三级精品| 国产日韩欧美中文| 真实国产乱子伦视频 | 成人无码一区二区三区视频在线观看 | 亚洲天堂网视频| 日本精品影院| 成人精品区| 扒开粉嫩的小缝隙喷白浆视频| 一区二区欧美日韩高清免费| 日本少妇又色又爽又高潮| 国产精品手机在线观看你懂的 | 欧美成人免费| 亚洲综合亚洲国产尤物| 精品中文字幕一区在线| 国产精品手机在线播放| 国产精品视频第一专区| 亚洲福利网址| 欧美激情伊人| 天堂成人在线| 黄色福利在线| 久久久成年黄色视频| 久久精品66| 欧美三级日韩三级| 中文无码精品A∨在线观看不卡 | 欧美日本中文| 国内精品小视频在线| 成人午夜亚洲影视在线观看| 国内视频精品| 免费毛片a| 国产大片黄在线观看| 波多野结衣一区二区三区AV| 久久夜色精品国产嚕嚕亚洲av| 亚洲日韩日本中文在线| 亚洲av日韩综合一区尤物| 亚洲国产精品一区二区高清无码久久| 国产理论最新国产精品视频| 日本91在线| 欧美精品啪啪一区二区三区| 精品久久国产综合精麻豆 | 9cao视频精品| 国产中文一区a级毛片视频| 国产区在线观看视频| 国产迷奸在线看| 真实国产精品vr专区| 亚洲精品成人片在线播放| 天天摸夜夜操| 97国产精品视频自在拍| 精品91视频| 亚洲综合香蕉| 青青草原国产精品啪啪视频| 欧美精品成人| 亚洲中文无码h在线观看| 欧美精品H在线播放| 2022国产91精品久久久久久| 成人在线综合| 伊人久久青草青青综合| 国产农村妇女精品一二区| 久久亚洲AⅤ无码精品午夜麻豆|