国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于openfire和xmpp協議的Webim客戶端設計與實現

2014-05-30 10:48:04左海春
電腦知識與技術 2014年9期
關鍵詞:通信網絡

摘要:WebIM,是基于HTTP協議,系統(tǒng)采用B/S結構進行開發(fā),客戶端以網頁的形式實現與openfire服務器及其它客戶端的及時通信。這種B/S結構的系統(tǒng)功能在服務器端統(tǒng)一管理與維護,既降低了維護難度,也使系統(tǒng)部署費用得到減少。因此,Web IM技術將在基于即時通信及Web的遠程監(jiān)控、網站客服等方面有重大的意義。為解決現有WebIM系統(tǒng)客戶端“拉”(Client_pull)模式周期請求而產生的系統(tǒng)消息延遲,以及客戶端和服務器端通信量大的問題,提出了利用服務器“推”(Server-push)模式技術作為基礎的WebIM系統(tǒng),并選擇openfire開源服務器及支持XMPP作為服務器和客戶端的通信協議。并給出了實現HTTP長連接的策略。并開發(fā)實現了WebIM系統(tǒng),采用服務器推送方式使用戶在體驗方面得到改進,Web用戶將不會感覺到消息的延遲。

關鍵詞:IM;WebIM;通信;網絡

中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2014)09-1971-05

傳統(tǒng)的基于WebIM的引擎設計方式大多使Ajax無刷新交互技術實現,設計一種時間間隔定期獲取數據。它是一種基于客戶端不斷向服務器發(fā)出請求,以實現與服務器保持同步。 但從基于這技術的產品實際效果來看,客戶與客戶之間的數據信息延遲有時會很大,不是很穩(wěn)定。同時,大量的同步請求數據使得服務器和客戶端之間的通信量增大,使網絡的性能下降,服務器負載過重。該文通過對現有WebIM進行了研究,分析了XMPP技術,提出了以支持XMPP的openfire服務器推送技術來代替?zhèn)鹘y(tǒng)客戶周期性的請求保持同步,致使客戶數據更新的基于B/S結構的WebIM系統(tǒng),并通過佛山一呼百應移動電子商務平臺項目的WebIm系統(tǒng)驗證了該方案的可行性,有效性。原型系統(tǒng)也可以擴展到類似系統(tǒng)中。

本文設計與實現的Webim系統(tǒng)是以openfire為服務器,以xmpp技術更新數據??蛻舳送ㄟ^瀏覽器登錄服務器后,即時更新用戶UI數據。Openfire服務器通過xmpp技術得到新的數據后,即時向客戶端推送。發(fā)送完后,客戶端瀏器與openfire繼續(xù)保持連接,等待下一次數據的更新。xmpp技術采用長連接及服務器的推送方式,減少了客戶端的請求,同時也減少了openfire服務器的響應時間,也節(jié)省了網絡帶寬,改善了服務器也與客戶端的傳輸性能,從而延遲得到減少,用戶的體驗會更好。

1 傳統(tǒng)的WebIM存在的問題

1.1延遲

現有許多WebIM系統(tǒng)為了增強用戶體驗,使用AJAX技術進行異步通信,WebIM客戶端游覽器按照設定的時間間隔定時向服務器刷新數據。當客戶端與客戶端交換信息時,發(fā)送端先把數據發(fā)送到服務器存儲,然后當接收端向服務器端請求數據時,才能獲取新的數據。在這個過程中客戶端通信延遲的最小時間間隔將是AJAX異步請求。但在實際的應用中,客戶端消息的延遲將大于這個時間間隔,因為服務器端需要處理數據庫事務以及實例化AJAX客戶端的對象。所以現有WebIM系統(tǒng)中,普遍存在消息延遲的情況。

1.2 通信量大,通信性能差

WebIM客戶端為了與服務器保持同步,需周期性向服務器發(fā)送信息,為了減少傳送信息的延遲,必須將周期訪問時間設置很小,這將對服務器產生壓力,因為這些“心跳”信息只是使服務器與客戶端維持同步,使用戶和用戶維持在線狀態(tài),相當一些控制,而不是實際有效信息。過多的這些數據增加了服務器的負載,增大延遲。另外如果客戶之間的消息更新的頻率很慢時,服務器需要額外去響應客戶端的心跳信息,并還需返回類似于false的數據給客戶端,這樣就為服務器端帶來了負載上的壓力,也增大延遲。

2 xmpp技術帶來的改變

xmpp通過建立一個和Openfire服務器的長連接,當openfire服務器獲取了新的數據時,通過該長連接即時向客戶端進行推送,客戶端從長連接管道中得到了數據的更新。使用xmpp技術所建立的長連接機制,能很好地解決了二個問題,第一,即時推送,消息即時,無延遲。第二,長連接機制,減少了建立與關閉連接數,在整個通信過程中,長連接一直維持,直至客戶端主動退出系統(tǒng),從而減少了通信量,改善了能信性能。

HTTP長連接策略:

openfire服務器支持xmpp技術采用推送。當服務器端的信息有變化時,主動推送,而不需要客戶端請求。推送技術主要有以下兩種: (1)HTTP流方式(2)長輪詢方式

在HTTP1.1規(guī)范中規(guī)定,客戶端與服務器端的HTTP的連接不能超過兩個,如果超過二個的連接,將會被阻塞丟掉。所以在每個WebIM客戶端和服務器之間只建立一個HTTP的長連接,也符合HTTP規(guī)范要求,也改善了網絡的性能。長連接管道中XMPP消息按優(yōu)先級排列:聊天消息:聯系人的消息:公告消息,來進行發(fā)送。在openfire中與客戶的連接中最核心的Servlet技術是Connection_Servlet,它實現HttpServlet接口類,private的成員變量中保留了Continuation類的對象,使瀏覽器客戶端和openfire服務器端的HTTP長連接得到維持。

3 客戶端設計與實現

3.1 通信協議

WebIM系統(tǒng)設計使用XMPP(exten-siblemessagingandpresenceprotocol,可擴展消息處理在線協議)協議,它是基于可擴展標記語言 (XML)的協議,用于即時信息(IM)以及實時在線探測。XML流通過在TCP/IP鏈路上完成服務器端和客戶端的傳輸通信,所有通信開始以流結點開始,通信結束以流作為結束。web客戶端通過解析XML來獲取傳輸的信息內容。

圖1 XMPP工作原理,所有從一個client到另一個client的jabber消息和數據都要通過xmpp server。

1)client連接到server

2)server利用本地目錄系統(tǒng)的證書對其認證

3)client制定目標地址讓server告知目標狀態(tài)

4)server查找連接并進行相互認證

5)client間進行交互

3.2 web客戶端與openfire通信線程的設計

web客戶端與openfire通信線程設計分三個過程,第一個過程是登錄,接著第二個過程是正常即時通信,第三個過程,退出系統(tǒng)。登錄與退出啟用相同的線程,由webim的發(fā)起。正常通信,由openfire發(fā)起。當客戶端首次登錄時,啟用一個客戶端請求線程,用來從openfire獲取用戶好友列表信息和用戶個人信息及用戶狀態(tài)信息來更新當前用戶的信息。當通信結束客戶退出系統(tǒng),該線程立即被激活,通過發(fā)送XMPP的XML數據流,類似于truetrue等信息用來描述用戶下線狀態(tài)或離線狀態(tài)信息給openfire,openfire通過長連接進行推送該用戶的列表用戶。好友的客戶端得到更新,同時客戶端和服務器端所建立的HTTP長連接的進行釋放,流程如圖2所示。

當客戶端登錄成功后,WebIM端將啟動一個HTTP的長連接來監(jiān)聽服務器端更新的數據,服務器將是將變化的數據以基于xmpp的XML流方式通過長連接通道傳輸客戶端瀏覽器,客戶端UI界面及交換的數據信息得到更新。具體流程如圖3所示。

3.3 客戶端的實現

本系統(tǒng)客戶端的實現使用xmpp的Http和Openfire通信的JabberHTTPBind。JabberHTTPBind是jabber提供的XMPP協議通信的Http bind發(fā)送的形式,它可以完成WebBrowser和Openfire建立長連接通信。Web客戶端用戶ClientA通過jsjac.js核心通信模塊庫發(fā)送一條消息到JabberHTTPBind,然后JabberHTTPBind會向Openfire發(fā)送XMPP協議的XML的信息。Openfire服務器接收到xml流后進行解析,然后發(fā)送給指定的ClientB。用戶。JabberHTTPBind獲取到Openfire 服務器發(fā)送的數據后,解析報文向當前Servlet容器中的鏈接的Session中找到指定的用戶再發(fā)送數據給ClientB,如圖4所示。WebBrowser端用的是jsjac和JabberHTTPBind建立的連接,所有數據都要經過JabberHTTPBind解析/轉換發(fā)送給Openfire服務器。

圖4 web客戶端與openfire服務器的通信方式

Web客戶端的詳細實現:

1)客戶端UI,包括聊天窗口,登陸、消息、日志等

與openfire服務器連接地址設置,window["serverDomin"]指定其中一個openfire服務器的地址,否則客戶端無法通訊。

建立一個聊天窗口應用,并設置發(fā)送者和消息接收者,登陸到openfire服務器。退出openfire登陸,斷開鏈接。建立一個新聊天窗口,并設置消息接收者的實現。

$WebIM()方法是主函數,它可以完成聊天窗口的創(chuàng)建。$.WebIM.newWebIM方法是新創(chuàng)建一個新用戶一個窗口,這個窗口代表了一個新的用戶。

2)本地聊天應用核心代碼

包括發(fā)送消息; 獲取即將發(fā)送的內容;接收區(qū)域寫消息; 判斷是否是移動端會話信息;如果是就發(fā)送純文本信息,否則就發(fā)送其他代碼; 遠程發(fā)送消息; 非移動端通信 可以發(fā)送html代碼; 清空發(fā)送區(qū)域。

3)遠程聊天JavaScript核心代碼,與jsjac庫關聯的

構建jsjac的message對象

安裝(注冊)Connection事件模型

向chat接收信息區(qū)域寫消息

建立連接觸發(fā)事件的方法

4)消息區(qū)域、編輯器代碼 send.message.editor.js

5)web.xml配置

4 項目實施的結果與分析

第一,對HTTP長連接狀態(tài)進行了監(jiān)測,利用網絡包監(jiān)測分析工具對WebIM客戶端和openfire的HTTP長連接進行了監(jiān)測,web客戶端初次請求服務器端openfire時,服務器端openfire與客戶端瀏覽器建立長連接,當openfire服務器有新的數據更新時,即時通過建立的長連接推送給客戶端瀏覽器。推送的內容為xml流信息,查看服務器連接狀態(tài)和客戶端狀態(tài)都為ESTABLISHED狀態(tài),說明HTTP長連接存在。從監(jiān)測發(fā)現客戶端始終和服務器端在整個通信過程中從未斷開連接,能高效地保障數據的通信。

第二,當服務器端和客戶端在設定的時間內沒有進行通信時客戶端和服務器端處于半連接狀態(tài),客戶端將變?yōu)镕IN_WAIT_2連接狀態(tài),服務器變?yōu)镃LOSE_WAIT連接狀態(tài),但只要有數據流產生,客戶端和服務器狀態(tài)又將轉變成ESTABLISHED狀態(tài),即正常即時通信。

第三,當客戶端退出或關閉時,服務器端與客戶端的長連接將被終止,同時服務器端資源也補釋放,以及發(fā)送好友信息,更新好友列表和用戶UI等信息。

通過開發(fā),實現了本webim系統(tǒng),使用xmpp實現HTTP長連接是有效的,也是可行的。根據系統(tǒng)對本項目在廣州佛山一呼百應移動電商平臺的應用監(jiān)測,基于openfire服務器和xmpp技術構建的WebIM系統(tǒng)將很好的解決消息延遲的情況。滿足了設計初要求,具有良好的運營性能。

5 結束語

WebIM系統(tǒng)在用戶無需安裝其它客戶軟件,就可以通過客戶瀏覽器連接到im系統(tǒng)服務器端,方便用戶使用。本系統(tǒng)客戶端的實現使用xmpp技術和Openfire服務器技術xmpp技術通信的JabberHTTPBind。JabberHTTPBind是jabber提供的XMPP協議通信的Httpbind發(fā)送的形式,它可以完成WebBrowser和Openfire建立長連接通信,也是一種基于B/S架構的連接方式。本系統(tǒng)的設計與實現基于xmpp技術的長連接方式,采用服務器推送信息,信息延遲減少,使用戶體驗方面有所改進。通過長連接方式,減少多次建立或關閉服務器與客端的連接,為服務器端減少了負載,改善了即時通信的性能,同時也能方便擴展到其他系統(tǒng)中,具有推廣價值。

參考文獻:

[1] 顧治華,劉家璽,汪津.基于XMPP協議的ejabberd服務器黑名單實現[J].微計算機信息,2010(18).

[2] 王振興,黃靜.基于php和服務器推技術的Web即時聊天系統(tǒng)[J].計算機系統(tǒng)應用,2012(12).

猜你喜歡
通信網絡
基于“一級調度、兩級運維”的通信管理體系研究①
科技資訊(2016年19期)2016-11-15 10:10:38
計算機技術在通信中的應用
簡述計算機通信網絡安全與防護策略
Android環(huán)境下主UI線程與子線程通信機制研究
無線自組網在野戰(zhàn)防空通信系統(tǒng)中的應用
對數字微波通信技術的研究
計算機網絡管理技術探析
芻議計算機網絡信息化管理
油氣集輸系統(tǒng)信息化發(fā)展形勢展望
基于網絡的信息資源組織與評價現狀及發(fā)展趨勢研究
磴口县| 土默特左旗| 香格里拉县| 宜春市| 浠水县| 凌源市| 山阳县| 双牌县| 蒙城县| 西昌市| 平顺县| 远安县| 搜索| 呼伦贝尔市| 庆城县| 抚远县| 古田县| 北流市| 桂东县| 伊宁县| 太保市| 石泉县| 图片| 观塘区| 新营市| 三穗县| 新密市| 阳信县| 亳州市| 贡山| 华坪县| 荥阳市| 彩票| 丰城市| 贵定县| 康平县| 墨竹工卡县| 禹城市| 甘洛县| 库伦旗| 新闻|