• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      B/S架構(gòu)中的數(shù)據(jù)推送設(shè)計與實(shí)現(xiàn)

      2013-12-29 00:00:00錢敬
      電腦知識與技術(shù) 2013年10期

      摘要:以B/S系統(tǒng)中的數(shù)據(jù)推送開發(fā)為背景,選取了通過客戶端瀏覽器的定時刷新來定時向服務(wù)器請求新數(shù)據(jù)的方式,基于J2EE架構(gòu)完成了整個推送技術(shù)的設(shè)計與實(shí)現(xiàn),著重對所使用的關(guān)鍵技術(shù)、設(shè)計思想、具體實(shí)現(xiàn)進(jìn)行了分析。在某呼叫中心應(yīng)用系統(tǒng)的實(shí)際應(yīng)用表明,該技術(shù)達(dá)到了設(shè)計目標(biāo),并成功的實(shí)施與運(yùn)行,對業(yè)務(wù)開展起到了積極的推動作用,對企業(yè)開發(fā)類似應(yīng)用具有一定的借鑒意義。

      關(guān)鍵詞:B/S架構(gòu);數(shù)據(jù)推送;jquery;ajax;json

      中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2013)10-2356-04

      現(xiàn)在B/S架構(gòu)的系統(tǒng)逐漸成為企業(yè)應(yīng)用的主流,由于B/S系統(tǒng)都是基于HTTP協(xié)議的,這就決定了它在實(shí)時應(yīng)用方面的缺陷,因?yàn)榉?wù)器端的信息發(fā)生了任何變化都不會主動發(fā)送到客戶端。但是在B/S架構(gòu)中服務(wù)器向?yàn)g覽器推送數(shù)據(jù)在許多場合都有需求,例如實(shí)時監(jiān)控報警、即時消息等。這就存在一個問題,客戶端如何才知道服務(wù)器端數(shù)據(jù)發(fā)生了變化?何時才該去向服務(wù)器請求新數(shù)據(jù)呢?現(xiàn)在,在B/S架構(gòu)中通常的解決方案是通過客戶端瀏覽器的定時刷新來定時向服務(wù)器請求新數(shù)據(jù)。雖然這種方式存在著一定時差,實(shí)時性不高,并且會增加服務(wù)器和網(wǎng)絡(luò)負(fù)擔(dān)等問題,但由于在實(shí)際應(yīng)用中,這種方式便于快速開發(fā)實(shí)現(xiàn),依然是眾多系統(tǒng)設(shè)計、開發(fā)人員的首選解決方案。以下將以在J2EE中的具體應(yīng)用為例,來探討基于這種思想的推送機(jī)制的設(shè)計與實(shí)現(xiàn)。

      1 設(shè)計與實(shí)現(xiàn)

      1.1 設(shè)計概述

      在設(shè)計上,考慮到常見的B/S應(yīng)用中經(jīng)常采用三層架構(gòu)模型,即數(shù)據(jù)層、功能層、表示層。數(shù)據(jù)推送也針對這三層架構(gòu)模型,分別在每一層實(shí)現(xiàn)不同的功JLamiJz5s0FllCpoBujSSn6UUAisdjcJnLVGN+vqp68=能,并有機(jī)組合成一個完整的推送機(jī)制:

      數(shù)據(jù)層:用于存儲需要推送的數(shù)據(jù),以及與推送相關(guān)的控制信息。

      功能層:用于收集、生成需推送的數(shù)據(jù),并存入數(shù)據(jù)層;以及根據(jù)從客戶端的請求從數(shù)據(jù)層獲取推送數(shù)據(jù),并反饋到表示層。

      表示層:用于定時向服務(wù)器請求刷新待推送數(shù)據(jù),并展現(xiàn)獲取到的推送數(shù)據(jù)。

      1.2 數(shù)據(jù)層設(shè)計與實(shí)現(xiàn)

      定義存儲推送數(shù)據(jù)的數(shù)據(jù)庫表結(jié)構(gòu),至少包括以下字段:主鍵、推送內(nèi)容、推送對象、推送狀態(tài)。推送狀態(tài)可包括:未獲取、已獲取、已過期。為了使推送過程的管理更靈活,可以加上相關(guān)的控制信息,如:推送內(nèi)容有效期、客戶端展示時長、客戶端刷新請求間隔時長、推送開關(guān)等。以上字段、狀態(tài)等可根據(jù)具體業(yè)務(wù)使用場景,加以擴(kuò)展。

      1.3功能層設(shè)計與實(shí)現(xiàn)

      功能層至少包括產(chǎn)生、獲取推送數(shù)據(jù)2個不同的action。

      產(chǎn)生推送數(shù)據(jù)的action,根據(jù)業(yè)務(wù)觸發(fā)條件,生成推送內(nèi)容、推送對象,并寫入推送數(shù)據(jù)表中。其中,業(yè)務(wù)觸發(fā)條件可以是來自接口的數(shù)據(jù),或者由客戶端主動發(fā)送的請求,或者系統(tǒng)定時執(zhí)行收集的信息等。

      獲取推送數(shù)據(jù)的action,根據(jù)客戶端的定時刷新觸發(fā),訪問推送數(shù)據(jù)表,獲取與客戶端推送對象一致的數(shù)據(jù),并構(gòu)造成JSON字符串,返回給客戶端。

      在這里用到了JSON(JavaScript Object Notation)。JSON是一種輕量級的數(shù)據(jù)交換格式。JSON采用完全獨(dú)立于語言的文本格式,這使JSON成為理想的數(shù)據(jù)交換語言。易于人閱讀和編寫,同時也易于機(jī)器解析和生成。它基于JavaScript的一個子集。JSON 是 JavaScript 原生格式,這意味著在 JavaScript 中處理 JSON 數(shù)據(jù)不需要任何特殊的 API 或工具包。JSON 可以將 JavaScript 對象中表示的一組數(shù)據(jù)轉(zhuǎn)換為字符串,然后就可以在函數(shù)之間輕松地傳遞這個字符串,或者在異步應(yīng)用程序中將字符串在客戶端和服務(wù)器端進(jìn)行傳遞。比起XML來說,JSON在數(shù)據(jù)傳輸上對網(wǎng)絡(luò)的壓力要小得多,對數(shù)據(jù)的編碼、解碼也比XML要簡單。當(dāng)然,如果你習(xí)慣使用XML,那么在這里采用XML替代JSON也是一樣的,不影響功能的實(shí)現(xiàn)。

      1.4表示層設(shè)計與實(shí)現(xiàn)

      表示層通常為JSP頁面,要實(shí)現(xiàn)實(shí)時刷新、數(shù)據(jù)獲取、數(shù)據(jù)展示三項(xiàng)功能。

      在數(shù)據(jù)推送中,要通過客戶端瀏覽器的定時刷新來定時向服務(wù)器請求新數(shù)據(jù),就必須使用AJAX,同時為了方便的處理JSON對象,以及在頁面上靈活的進(jìn)行展示,訪問各個頁面元素,采用jquery無疑是最簡便的選擇。jquery是繼prototype之后又一個優(yōu)秀的JavaScrīpt框架。它是輕量級的js庫(壓縮后只有21k),它兼容CSS3,還兼容各種瀏覽器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。jquery使用戶能更方便地處理HTML documents、events、實(shí)現(xiàn)動畫效果,并且方便地為網(wǎng)站提供AJAX交互。

      實(shí)時刷新有2種方式,即window.setTimeout或window.setInterval。本例子中,為了對實(shí)時刷新的頻率加以控制,可根據(jù)服務(wù)器的負(fù)載等具體情況,調(diào)整refreshTime,因此采用setTimeout方法,以保證刷新的間隔時間是可控的。

      頁面展示采用了marquee跑馬燈的方式,可將多次獲取到的推送信息滾動進(jìn)行顯示。根據(jù)具體應(yīng)用場景的不同,還可以采用其它方式,如提示性更強(qiáng)的alert,在模擬實(shí)時聊天的業(yè)務(wù)中,還可以采用模仿聊天窗口的方式。總之,在表示層的展示方式是豐富多樣的,完全依據(jù)業(yè)務(wù)場景的需要靈活的定制。

      2 結(jié)束語

      在B/S架構(gòu)中通過客戶端瀏覽器的定時刷新來定時向服務(wù)器請求新數(shù)據(jù)的數(shù)據(jù)推送機(jī)制,在某呼叫中心的應(yīng)用中,不僅實(shí)現(xiàn)了話務(wù)系統(tǒng)實(shí)時告警信息及時傳遞到坐席客戶端的功能,同時向坐席提供了模擬即時聊天的消息傳遞機(jī)制。經(jīng)過,500名坐席同時在線并發(fā)使用的實(shí)際檢驗(yàn),不僅能滿足話務(wù)系統(tǒng)的實(shí)時性要求,同時也滿足大規(guī)模并發(fā)的性能要求,在實(shí)際應(yīng)用中取得了良好的效果,對其它有類似業(yè)務(wù)場景的應(yīng)用系統(tǒng)可以借鑒。

      參考文獻(xiàn):

      [1] Jonathan Chaffer, Karl Swedberg. jQuery基礎(chǔ)教程 [M]. 李松峰,譯. 3版.北京:人民郵電出版社,2012.

      [2] Bear Bibeault ,Yehuda Katz. jQuery實(shí)戰(zhàn) [M]. 三生石上,譯.2版.北京:人民郵電出版社,2012.

      [3] Harwani B M. jQuery攻略[M]. 侯伯薇,陳寧,譯.北京:人民郵電出版社,2010.

      [4] 弗蘭納根. JavaScript權(quán)威指南[M]. 淘寶前端團(tuán)隊(duì),譯.6版.北京:機(jī)械工業(yè)出版社,2012.

      [5] Zakas N C. JavaScript高級程序設(shè)計[M]. 李松峰,曹力,譯. 3版.北京:人民郵電出版社,2012.

      [6] 李剛.瘋狂Ajax講義 [M]. 3版.北京:電子工業(yè)出版社,2013.

      [7] 高洪巖.至簡SSH:精通Java Web實(shí)用開發(fā)技術(shù):Struts+Spring+Hibernate[M]. 北京:電子工業(yè)出版社,2009.

      [8] 蔣衛(wèi)祥,朱利華,閭楓.J2EE案例開發(fā)教程[M]. 北京:化學(xué)工業(yè)出版社,2011.

      虎林市| 铜梁县| 屏山县| 邹平县| 来安县| 乌鲁木齐市| 新余市| 都兰县| 特克斯县| 安义县| 华亭县| 姜堰市| 潞城市| 尚义县| 鹤峰县| 嘉黎县| 陇川县| 清水县| 卓资县| 湖南省| 岑巩县| 南澳县| 利川市| 江油市| 安达市| 普陀区| 吉隆县| 南开区| 江门市| 天门市| 蓬莱市| 龙川县| 巩义市| 泽普县| 万州区| 枣庄市| 项城市| 合肥市| 宜阳县| 芒康县| 富源县|