摘要:文章通過分析XMPP核心協議和企業級IMS(EIMS)的需求,通過開發Openfire服務器和集成自定義數據庫為EIMS設計了一個實施框架。我們所提供的基于XMPP的解決方案——嘟一下,具備更好的安全性和開放性,并且支持跨平臺應用,可以用最小的成本將基于網絡的IMS整合到公司內部應用和服務當中。
關鍵詞:即時通信系統(IMS);XMPP;嘟一下;用戶數據庫集成;Openfire
Design and Implementation of Douyi Based on XMPP Network
FEI Xiangru, DAI Shenglin, XU Donglin, HU Xiefei
(China Telecom Anhui Branch, Hefei 230001, China)
Abstract: The article analyzes the core protocol of XMPP and the requirements of enterprise level IMS (EIMS), develops an Openfire server and integrates a custom database to design an implementation framework for EIMS. The XMPP based solution we provide - Douyi, has better security and openness, and supports cross platform integration. It can integrate network based IMS into internal applications and services of the company at the lowest cost.
Key words: instant messaging system (IMS); XMPP; give it a beep; user database integration; Openfire
1" "研究背景
近年來,不少企業已逐漸認識到員工在日常辦公中使用即時通信(IM)的好處,然而,公共IM不安全、不可控,且安裝EIM軟件的成本過高。因此,基于XMPP的嘟一下提供了一個通信兼集中管理的內部控制平臺。
2" "相關背景知識
2.1 XMPP介紹
可擴展消息及存在協議(XMPP)是一個基于XML(可擴展標記語言)[1]的開放標準通信協議,具備開放、靈活和可擴展的特點。它能夠在個人或應用程序之間可靠地傳輸任何結構化的XML數據,包括RPC和SOAP調用。憑借固有的安全功能和對跨域服務器聯合的支持,XMPP更能夠滿足最苛刻環境的需求[2]。
2.2 XMPP網絡結構
在實踐中,XMPP網絡是由XMPP客戶端和服務器組成的,它們可以在一個計算機網絡上相互關聯。其中,最大的XMPP網絡連接著公共的XMPP服務器,人們可以自由地在一個公司內部局域網內,在安全的公司虛擬私人網絡環境下創建私人XMPP網絡。
XMPP服務器作為XMPP通信的一個抽象層,提供基本的信息傳遞、存儲和XML路由功能。它主要提供其他實體的管理連接和會話功能,使相關以XML流的形式來往于授權的客戶、服務器以及其他實體之間。大多數客戶通過TCP(傳輸控制協議)直接連接到服務器,并使用XMPP來充分利用服務器和相關服務所提供的功能。多個資源可以同時代表多個授權客戶連接到服務器,每個資源由XMPP地址的資源標識符區分[3]。
2.3 尋址方案和標識符
XMPP路由的核心是一種國際化邏輯尋址方案。域名部分通常是服務器、組件或插件的域名。在簡單郵件傳輸協議中,像電子郵件地址一樣,服務器代表用戶相互連接。網絡上的每個用戶都有一個唯一的JID。每個資源可能都指定了一個稱為優先級系數的數值。發送到username@example.com的信息將轉到具有最高優先級的客戶端。此外,沒有用戶名部分的JID也是有效的,可以用于系統消息和控制服務器上的特殊功能。對于這些JID,資源也是可選的。
2.4 XML流和XML節
(1)XML流。XML數據流用于在網絡上的任意兩個實體之間傳輸和交換XML元素,是一種容器類機制。一旦在客戶端和服務器之間建立了長期TCP連接,就會啟動客戶端和服務器間的XML流。XMPP XML流采用一個冗長文檔的形式,該文檔記錄了每次傳遞消息時客戶端和服務器之間的通信。流是通過發送一個打開的<stream:stream>標記來啟動的,每個流將有一個有效的XML文檔[4]。
(2)XML節。XML節是結構化信息的離散語義單元,通過XML流從一個實體發送到另一個實體。XML節存在于根lt;stream/gt;元素的直接子級,如果它與[XML]的生產[5]內容相匹配,則可被認為是平衡的。這里定義的唯一XML節是<message/>、<presence/>和<iq/>,message節用于在實體之間發送消息,presence節使實體能夠與其他實體共享其可用性和狀態,Info/Query(IQ)節是雙向的,用于當一個實體查詢另一個實體并期望得到響應時使用。
3" "嘟一下的總體分析和設計
3.1 嘟一下的基本要求
嘟一下需要提供人與人之間業務實時交互的基本功能,如即時通信、文件傳輸、花名冊管理和會議室管理等;企業可以根據自己的業務需求完成特定的模塊化客戶端定制。本文將基本業務需求初步總結如下。
⊙ 嘟一下操作流程的基本功能應該簡單、易于理
解和掌握。
⊙ 企業級產品必須具有高度的安全性和可控性,
業務經理可以通過即時通信服務器對內部用戶
進行統一管理和監控。
⊙ 將嘟一下系統集成到OA、ERP等辦公管理和
應用系統中,從而實現業務溝通與管理的結合。
⊙ 嘟一下需要開發出結構良好的編程語言和開放
接口來實現二次開發,為企業在未來的維護中
的系統升級做準備。
⊙ 嘟一下應該打破IM協議的限制,實現與其他通
信產品的互通互連。
3.2 嘟一下的設計框架
本文設計了基于XMPP協議和開源軟件的嘟一下系統的總體框架,通過登錄XMPP客戶端,嘟一下用戶可以與XMPP服務器建立連接并相互通信。XMPP客戶端是基于XMPP協議開發的,除了XMPP標準協議提供和支持的基本功能,在設計嘟一下客戶端時需要滿足二次開發以豐富客戶端的功能,如文件傳輸、會議室和廣播等所需功能,這也將為最終用戶提供更高效、更方便的操作模式。服務器端的系統管理員可以通過管理模塊操作和控制嘟一下服務器和其他應用服務器的數據庫,還可以根據自己的需求和情況,通過插件開發來設計和實現插件功能。通過配置XMPP提供的網關,公司可以在內部即時消息系統與外部即時消息系統之間交換信息。
3.3 嘟一下平臺開發
3.3.1 基于XMPP的Openfire服務器
Openfire是一款開源實時協作(RTC)服務器,配有各種插件進行功能擴展。其使用JSP和JavaBeans,本身的系統設計具有良好的編程結構,管理控制臺支持插件來改變服務器的功能。通過Openfire的編程設計功能,JSP頁面可以通過打包請求對象直接調用業務處理邏輯類實例的方法來傳遞變量和跳轉頁面,并采用裝飾性框架來顯示JSP頁面。因此,Openfire在ElM服務器開發和應用中具有更好的靈活性和可配置性。本文中將Openfire作為設計和開發嘟一下服務器。
Openfire使用開放式XMPP協議,可以實現與其他基于該協議的即時通信軟件的互操作性;Openfire基于Java編程語言編寫代碼,具有清晰的結構和編程規范,易于理解和二次開發;Openfire實現了插件機制,插件擴展機制完美地滿足了用戶設計和擴展服務器功能的要求;Openfire的基本功能穩定,安裝和配置過程簡單,一臺服務器就可以支持數千用戶登錄,具有強大的數據通信能力。
3.3.2 Openfire消息傳遞過程
采用XMPP協議進行IM,其核心功能是消息傳輸。Openfire最重要的核心代碼是監聽和處理客戶端消息包。在本文中,我們想通過引入一些重要的類和服務來分析這個過程。
首先,獲取當前會話類StanzaHandler,該類也被假設為業務流程類,實例化XMPP PacketReader(解析和讀取XML數據,打包數據包),然后根據XML數據包判斷確定應該處理哪種XML元素,從而進入過程(doc)方法。
其次,如果處理請求的XML包是IQ類型,其處理流程與消息和存在類型相同,在這方面,進程會調用processIQ方法對IQ類型的包進行初步處理,隨后將其傳遞給路由器組件。路由器進一步將包傳輸給特定的IQRouter類的handle方法,在此過程中IQ包中的XML元素被解析并打包至用戶對象,接著系統調用底層數據庫來存儲XML格式數據,并生成返回客戶端的應答包。
最后,在完成會話的處理流程后,系統將自動生成回復并返回給客戶端。進入并調用conn.delivery(數據包),接著進入NIOConnection類并確定連接是否斷開,如果連接斷開,則繼續關閉。這樣就可以在客戶端和服務器之間接收和處理XML數據包。
3.4 XMPP服務器與Openfire客戶端之間的消息處理
在嘟一下實時通信系統中,首先通過訪問IM Web界面,用戶將被要求輸入用戶名和密碼信息,同時觸發一系列相關的偵聽器事件,然后調用事件函數來處理信息流,并將其打包為XML結構化數據;其次,當消息處理模塊接收到打包后的數據時,它會在數據上附加一些屬性,通過收發器處理模塊處理XML流并將其發送到Openfire服務器。最后,當Openfire服務器接收到XML流時,它將檢查會話池,服務器將解析XML流并生成XML數據包,生成的數據包將被壓入數據包隊列,Openfire會處理該數據包并以XML數據包的形式返回結果。
簡言之,為了建立基于XMPP的嘟一下系統,IM客戶端必須獲取唯一的會話ID來連接服務器,并且轉換后的消息格式必須以XML格式結構化,并嚴格遵守XMPP,客戶端也應該正確有效地監控和解析XML流。
4" "實施嘟一下的關鍵技術
4.1 客戶數據庫集成
根據嘟一下的需求,我們需要將IM與我們現有的網站集成,然而,對于大多數公司來說,用戶已經在企業系統中擁有帳戶,Openfire提供了自定義的數據庫集成功能來解決上述問題。本文總結了Openfire身份驗證、用戶和分組、自定義數據庫表集成等關鍵點。通過與用戶數據庫的簡單集成,用戶可以使用現有的用戶名和密碼進行身份驗證。
(1)與自定義外部數據庫最簡單的集成就是身份驗證,但是當客戶數據庫已經有密碼加密時,在這種情況下,必須以相同的加密方法完成身份驗證集成。
(2)通過用戶集成,Openfire可以從自定義數據庫加載用戶數據。自定義數據庫可以是不同于Openfire數據庫的服務器上的不同數據庫。
(3)Openfire可以從自定義數據庫加載組數據。完成分組集成設置時,可以將每個組中的一個成員授權為管理員,并且Openfire中的任何分組都可以被指定為共享分組。
4.2 Openfire插件開發
插件提供了一種簡單而強大的方式來向Openfire添加功能,而無須直接對源代碼進行更改。它們可以提供與組件基本相同的功能,但它們也可以訪問服務器的內部數據結構,并可以修改核心服務器的行為。它們采用消息的內部表示方式,不必解析/序列化XML節。在該系統中,我們開發了幾個插件,具有處理重復登錄、用戶組織結構和文件傳輸等功能,極大地提高了客戶端的功能應用水平。
4.3 基于Web的IM客戶端
網絡即時消息(WIM)不僅是網絡營銷的需要,也是為了滿足未來新興商業模式而開發的。WIM的優勢是基于B/S模式,無須安裝客戶端軟件,開源編程,易于集成到Web應用程序中,并支持多種類型的操作系統和瀏覽器。越來越多的商業網站提供WIM服務,以提高通信效率和降低成本。
在嘟一下客戶端開發過程中,我們分析和總結了各種基于XMPP的開源WIM??紤]到穩定性和靈活性,發現Jwchat具有最全面的功能,因此將Jwchat選為嘟一下的Web客戶端。二次開發的關鍵技術是將HTML頁面編程為JSP頁面,從而應用基于J2EE的三層架構(Webwork+Spring+Hibernate)。本文中介紹的嘟一下證明了該體系結構可提供一個安全性強、編程結構簡單的跨平臺。
5" "結束語
公司選擇運營自己的XMPP服務器有很多原因。一些公司不想將敏感的內部通信委托給外部服務公司。在這些類型的環境中,自托管消息服務的優勢是顯而易見的?;赬MPP的嘟一下的另一個關鍵優勢是,它可以與公司的其他應用程序和服務集成,如可以集成到外部的Web客戶支持聊天系統中。該協議也足夠靈活,除了聊天之外,還支持多種不同的用途。它可以與各種自動化系統接口,這使嘟一下成為辦公室實時工作和合作的重要通信工具,具有重要的實用價值和發展前景。■
參考文獻
[1] SHAO N W Y, YANG S J H, SUE A Y S. A Content Management System for Adaptive Learning Environment[C]. Proceedings of Fifth International Symposium 2003 on Multimedia Software Engineering, 2003.
[2] LIU J X. Design and Analysis of a Solution for a Managed and Controllable P2P Streaming Media System with Integrated IMS[D]. Beijing University of Posts and Telecommunications, 2010.
[3] SAINT-ANDRE P Ed. Extensible messaging and presence protocol (XMPP): Core[S]. RFC3920, 2004.
[4] HATTERJEE S, et al. Instant Messaging and Presence Technologies for College Campuses[J]. IEEE Network, 2005, 19(3): 4-13.
[5] WEIS G, LEWIS A. Using XMPP for ad-hoc grid computing an application example using parallel ant colony optimization[C]. Proceedings of the IEEE International Symposium on Parallel and Distributed Processing, 2009.
作者簡介:費相如(1983-),女,漢族,安徽合肥人,研究生,研究方向為數據分析、數據挖掘。