金曉丹 王波 趙曉倩
摘要:為解決農(nóng)產(chǎn)品信息不流暢而導(dǎo)致的農(nóng)產(chǎn)品滯銷問題,在農(nóng)產(chǎn)品電子商務(wù)系統(tǒng)中引入WebIM技術(shù)。設(shè)計(jì)了WebIM系統(tǒng)的各個關(guān)鍵類和具體功能,通過Comet技術(shù)實(shí)現(xiàn)了維護(hù)客戶端和服務(wù)器端通信的HTTP長連接,利用Servlet異步特性實(shí)現(xiàn)了關(guān)鍵的即時通信的Pushlet框架。WebIM技術(shù)適合實(shí)現(xiàn)交互性和實(shí)時性較強(qiáng)的web應(yīng)用,可有效解決農(nóng)產(chǎn)品買賣雙方的實(shí)時溝通和農(nóng)產(chǎn)品信息的實(shí)時更新問題。
關(guān)鍵詞:電子商務(wù);WebIM;Comet;Pushlet; Servlet
中圖分類號:TP391 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2013)07-1720-03
近年來,農(nóng)產(chǎn)品滯銷現(xiàn)象成為阻礙農(nóng)村經(jīng)濟(jì)健康發(fā)展、影響農(nóng)民收入增長的重要問題之一。解決好農(nóng)產(chǎn)品市場存在的農(nóng)產(chǎn)品結(jié)構(gòu)性、季節(jié)性、區(qū)域性過剩問題成為當(dāng)務(wù)之急。隨著計(jì)算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)和遠(yuǎn)程通信技術(shù)的不斷發(fā)展,電子商務(wù)成為一種新型的商業(yè)運(yùn)營模式。農(nóng)產(chǎn)品電子商務(wù)系統(tǒng)能夠使圍繞農(nóng)產(chǎn)品的各種交易活動實(shí)現(xiàn)電子化、數(shù)字化和網(wǎng)絡(luò)化,農(nóng)民與收購商之間可以不受地域的限制,以非常便捷的方式完成交易過程,對于促進(jìn)農(nóng)民增收、引導(dǎo)農(nóng)業(yè)結(jié)構(gòu)調(diào)整、加快農(nóng)村市場流通等起到了積極的作用。
IM (Instant messaging,即時通訊)是一個終端服務(wù),允許多用戶通過使用網(wǎng)路即時的傳遞文字、檔案、語音與視頻進(jìn)行交流。WebIM將IM服務(wù)嵌套在網(wǎng)頁中,這種技術(shù)不僅繼承了IM互動性強(qiáng)、營銷效率高、傳播范圍大的優(yōu)點(diǎn),同時打破了用戶必須安裝IM插件的局限性。農(nóng)產(chǎn)品電子商務(wù)系統(tǒng)應(yīng)用WebIM技術(shù)后,買賣雙方可以即時的在線交流,使農(nóng)產(chǎn)品銷售者掌握主動權(quán),及時的將農(nóng)產(chǎn)品信息的展示給收購商,擺脫以往等待關(guān)注的被動局面。農(nóng)產(chǎn)品銷售者也可以通過電子商務(wù)系統(tǒng)用戶的注冊需求信息,將符合潛在采購需求的用戶組成群組,以群發(fā)的形式對特定用戶群發(fā)送其可能感興趣的農(nóng)產(chǎn)品信息,尋求潛在收購商,從而擴(kuò)大農(nóng)產(chǎn)品銷售渠道。
1 WebIM常用技術(shù)
WebIM是基于Web瀏覽器所構(gòu)建的一種即時通訊方式,常用技術(shù)包括:輪詢(polling)和服務(wù)器推送。
1.1 輪詢
輪詢的核心思想是,在客戶端和服務(wù)器之間建立連接,客戶端以固定時間間隔從服務(wù)器端查詢數(shù)據(jù)是否有改變,從而進(jìn)行增量式的更新。此技術(shù)具有實(shí)現(xiàn)容易,服務(wù)器資源占用少的優(yōu)點(diǎn)。但這種拉取數(shù)據(jù)的方式需要時間間隔足夠短才能保證數(shù)據(jù)傳遞的及時性。時間間隔過短,即使數(shù)據(jù)沒有更新,客戶端仍會在短時間內(nèi)對服務(wù)器發(fā)送多個請求,導(dǎo)致服務(wù)器資源的大量浪費(fèi)。
1.2 服務(wù)器推送
以服務(wù)器推送方式實(shí)現(xiàn)WebIM時,服務(wù)器能實(shí)時地將更新的信息傳送到客戶端,而無須瀏覽器一端發(fā)出請求。服務(wù)器推送解決了在保證傳送性能的前提下進(jìn)行協(xié)同多用戶的響應(yīng)問題。
傳統(tǒng)的服務(wù)器推送是通過基于瀏覽器的插件實(shí)現(xiàn)的,例如使用RMI、CORBA進(jìn)行服務(wù)器端的遠(yuǎn)程調(diào)用。這些技術(shù)實(shí)現(xiàn)復(fù)雜、存在防火墻限制、需要對客戶端維護(hù)。現(xiàn)在的服務(wù)器推送已經(jīng)向無插件推送(Comet)方式發(fā)展。Comet較適合事件驅(qū)動的Web應(yīng)用,以及對交互性和實(shí)時性要求很強(qiáng)的應(yīng)用,如證券交易分析、投票和實(shí)時監(jiān)控等。
Comet目前有兩種實(shí)現(xiàn)方式:長輪詢和HTTP流。
使用長輪詢方式時,瀏覽器會發(fā)出請求與服務(wù)器建立一個連接,保持該連接直到有數(shù)據(jù)傳遞或超時才返回。瀏覽器端響應(yīng)處理函數(shù)會在處理完服務(wù)器返回的信息后,再次發(fā)出請求,重新建立連接。使用HTTP流的方式時,HTML標(biāo)記iframe會在 HTML 頁面里嵌入一個隱蔵幀,然后將這個隱蔵幀的 SRC 屬性設(shè)為對一個長連接的請求,服務(wù)器端將不斷向客戶端傳送實(shí)時數(shù)據(jù)。Pushlet架構(gòu)是Comet的開源框架,從功能上實(shí)現(xiàn)了無插件的服務(wù)器推技術(shù)。該文基于Pushlet架構(gòu),設(shè)計(jì)了一個B/S模式的可應(yīng)用于農(nóng)產(chǎn)品電子商務(wù)系統(tǒng)的WebIM系統(tǒng)。
2 系統(tǒng)架構(gòu)設(shè)計(jì)
系統(tǒng)要求農(nóng)產(chǎn)品采購方能夠與銷售者之間實(shí)時的建立聯(lián)系、訂閱感興趣的農(nóng)產(chǎn)品主題、接收系統(tǒng)公告。針對以上需求,WebIM系統(tǒng)應(yīng)具有實(shí)時會話功能,并能訂閱農(nóng)產(chǎn)品信息、查詢歷史訂閱信息和相應(yīng)的農(nóng)產(chǎn)品信息管理功能,其系統(tǒng)架構(gòu)設(shè)計(jì)如圖1所示。
WebIM 客戶端客戶登錄系統(tǒng)后首先需要進(jìn)行初始化,通過啟用一個臨時的AJAX線程加載客戶個人信息和好友列表,同時將用戶上線信息更新給服務(wù)器端。初始化完畢后,客戶端通過HTTP流的方式監(jiān)聽服務(wù)器端數(shù)據(jù),如果數(shù)據(jù)有變化,則以XML流的方式在通道上進(jìn)行傳輸,接受數(shù)據(jù)的客戶端會更新客戶端消息和客戶端UI界面,從而保證獲得通信發(fā)起端發(fā)送的消息。申請訂閱農(nóng)產(chǎn)品信息、查詢歷史訂閱信息和信息管理功能都通過命令管理器來實(shí)現(xiàn)。當(dāng)用戶訂閱了服務(wù)器端的某個農(nóng)產(chǎn)品主題時,一旦服務(wù)器端有關(guān)于該主題的新消息產(chǎn)生,服務(wù)器會主動將其推送到訂閱了該主題的客戶端。當(dāng)用戶查詢歷史訂閱信息時,命令控制器將查詢命令會通過查詢管理器搜索信息數(shù)據(jù)庫,并返回查詢結(jié)果。當(dāng)客戶端客戶退出系統(tǒng)時,AJAX線程會將用戶下線狀態(tài)信息更新給服務(wù)器端,該用戶好友則通過服務(wù)器端的更新獲得好友下線信息。
3 WebIM系統(tǒng)實(shí)現(xiàn)
3.1 WebIM系統(tǒng)核心類及職能
Pushlet類:是一種Servlet類,將所有接收到的用戶請求包裝為事件對象,再根據(jù)會話對象、事件對象、請求對象、反饋對象構(gòu)造一個命令對象,將命令對象交由控制類處理。
會話類:代表一次用戶會話,使用類似URL重寫方式,通過服務(wù)器為每個會話分配一個會話ID,通過會話ID標(biāo)識會話。會話在其存活期內(nèi)有效。
控制類:是所有控制命令以及數(shù)據(jù)推送命令的執(zhí)行器。
客戶類:維護(hù)了一個阻塞的事件隊(duì)列。根據(jù)客戶端使用的連接模式處理服務(wù)器端的返回信息,并重新建立連接。
分發(fā)類:是事件分發(fā)器。對來源于客戶或者事件源的事件根據(jù)要求實(shí)現(xiàn)多播,廣播以及單播。
客戶分發(fā)類:根據(jù)不同的客戶端分發(fā)Javasc_ ript、XML、序列化數(shù)據(jù)。
3.2 WebIM系統(tǒng)具體實(shí)現(xiàn)
在WebIM系統(tǒng)中包含三種消息:聊天消息,用戶訂閱農(nóng)產(chǎn)品消息和農(nóng)產(chǎn)品公告消息。在設(shè)計(jì)客戶端時,可以為每個WebIM客戶和服務(wù)器建立一個HTTP的長連接(HTTP流)。服務(wù)器推送技術(shù)要求Web容器自身支持HTTP長連接。Jetty是由Java編寫的Web容器,通過Java中新的I/O包優(yōu)化了數(shù)據(jù)輸出緩沖架構(gòu)。Jetty可以使HTTP長連接具有數(shù)據(jù)交流的特性。因此Jetty可以作為服務(wù)器端的Web容器。在設(shè)計(jì)服務(wù)器端時,由于需要維持客戶端和服務(wù)器端的HTTP長連接,Pushlet類的連接Servlet的設(shè)計(jì)最為關(guān)鍵。本系統(tǒng)可以通過繼承HttpServlet實(shí)現(xiàn)連接Servlet。
4 性能測試
測試使用兩臺計(jì)算機(jī),中央處理器為Intel i5-3570,內(nèi)存為4G。一臺計(jì)算機(jī)模擬客戶機(jī),一臺計(jì)算機(jī)模擬服務(wù)器。
客戶機(jī)模擬N個客戶端對服務(wù)器發(fā)送請求,逐步增加客戶端N的個數(shù),判斷在客戶端個數(shù)N增加的情況下,客戶端能否得到正常響應(yīng),逼近并發(fā)性能的極限值。實(shí)驗(yàn)采用九組數(shù)據(jù)進(jìn)行測試,測試結(jié)果如表1所示。每組測試,客戶機(jī)均向服務(wù)器發(fā)送十次請求。
從表1可以看出,隨著模擬客戶端的數(shù)量增加,客戶機(jī)cpu占用率不斷增加。當(dāng)模擬客戶端數(shù)量達(dá)到1000時,并發(fā)請求已經(jīng)達(dá)到10000,客戶端仍能正常響應(yīng)消息,表示客戶機(jī)在發(fā)送大量請求后,仍可正常運(yùn)行。實(shí)驗(yàn)結(jié)果表明,該文設(shè)計(jì)WebIM系統(tǒng),并發(fā)吞吐能力較大,可以支持大量用戶同時使用,而不會發(fā)生請求無法響應(yīng)的現(xiàn)象。
5 結(jié)束語
WebIM 系統(tǒng)作為能夠進(jìn)行實(shí)時交流的網(wǎng)頁IM系統(tǒng),用戶無需安裝IM插件,使進(jìn)入農(nóng)產(chǎn)品電子商務(wù)系統(tǒng)的買賣雙方的交流更加方便,簡化了買家與賣家交流溝通農(nóng)產(chǎn)品信息的中間環(huán)節(jié)。通過WebIM系統(tǒng),農(nóng)產(chǎn)品信息能夠更加快速的在買賣雙方之間進(jìn)行傳播。
參考文獻(xiàn):
[1] 申艷光,王飛,申靜.農(nóng)產(chǎn)品電子商務(wù)中多層關(guān)聯(lián)規(guī)則挖掘技術(shù)的應(yīng)用[J].農(nóng)機(jī)化研究,2012(2):24-27,37.
[2] 景慎艷.基于Pushlet的服務(wù)器推技術(shù)的研究與應(yīng)用[J].現(xiàn)代計(jì)算機(jī),2009(10):132-134.
[3] 孫清國,朱瑋,劉華軍.Web應(yīng)用中的服務(wù)器推送技術(shù)研究綜述[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2008(11):116-120.