專利名稱:用于xmpp協(xié)議的servlet api和方法
技術領域:
本發(fā)明涉及遠程通信和網(wǎng)絡計算機電話系統(tǒng),包括互聯(lián)網(wǎng)和公共交換電話系統(tǒng)(Public Switched Telephone System),并且更具體地涉及一種用于根據(jù)Java服務器端應用程序(servlet)模型在XMPP API的基礎上部署兼容XMPP的應用程序的系統(tǒng)和方法。
背景技術:
世界范圍內已經(jīng)發(fā)展出兩種主要的遠程通信網(wǎng)絡。第一種是形式為公共交換電話系統(tǒng)(PSTN)的電話系統(tǒng)網(wǎng)絡。該網(wǎng)絡最初被設計用于傳送語音通信,不過隨后也適用于傳輸數(shù)據(jù)。第二種是形式為互聯(lián)網(wǎng)的計算機系統(tǒng)網(wǎng)絡?;ヂ?lián)網(wǎng)一直被設計用于傳輸數(shù)據(jù),而且正越來越多地被用于傳輸語音和多媒體信息。計算機實施的電話應用程序已經(jīng)被集成到這兩種遠程通信網(wǎng)絡中以提供更好的通信服務。例如在PSTN中,計算機電話集成已經(jīng)為POTS(普通老式電話服務)提供了更多的功能和控制。在互聯(lián)網(wǎng)上,計算機自身就是用于語音通信的終端設備并且還用作供終端設備的主機使用的智能路由器和控制器?;ヂ?lián)網(wǎng)是根據(jù)TCP/IP (傳輸控制協(xié)議/互聯(lián)網(wǎng)協(xié)議)套件通信的IP網(wǎng)絡全球通信網(wǎng)。具體地,語音和其他多媒體信息在互聯(lián)網(wǎng)上根據(jù)VoIP (互聯(lián)網(wǎng)語音傳輸)協(xié)議傳輸。PSTN和IP網(wǎng)絡的集成通過發(fā)揮IP網(wǎng)絡固有的路由靈活性和計算可達性而允許在語音應用程序的自動控制方面有更多功能。美國專利US6922411中介紹了一種用于簡單部署電話應用程序的示例性平臺,通過引用將其全部公開內容并入本文?;旧希W(wǎng)絡電話系統(tǒng)允許用戶部署與指定電話號碼相關聯(lián)的互聯(lián)網(wǎng)計算機電話應用程序。電話應用程序很容易由用戶以XML(擴展標記語言)用預定義的電話XML標簽(例如VoiceXML)創(chuàng)建并且易于在網(wǎng)站上部署。電話XML標簽包括用于通話控制和媒體控制的內容。與這些指定電話號碼中任何一個的通話都可以源于任何一種網(wǎng)絡電話系統(tǒng)例如PSTN(公共交換電話系統(tǒng))、無線網(wǎng)絡或互聯(lián)網(wǎng)。通話由互聯(lián)網(wǎng)上安裝的應用網(wǎng)關中心(AGC)接收。類似于網(wǎng)頁瀏覽器,AGC提供用于從其網(wǎng)站中檢索相關的XML應用程序并相應地處理通話的功能。這種類型的電話平臺允許在互聯(lián)網(wǎng)上構建和部署非常強大而又簡單的電話應用程序。以下是在這種平臺上部署的電話應用程序的一些示例?!案?發(fā)現(xiàn)(Follow me,find me)”應用程序按順序呼叫由用戶指明的一系列電話號碼,直到其中一個號碼應答并隨后連接該通話為止。否則,應用程序就做一些別的事例如收取消息或發(fā)送電子郵件或者向呼叫中心發(fā)送通話等。在另一個示例中,電話調查應用程序查詢被調查人口的電話號碼數(shù)據(jù)庫。應用程序隨后僅受支持的并行會話最大數(shù)量限制地并行呼叫多個號碼,然后響應于被呼叫方的應答播放一系列交互式語音提示/消息并在數(shù)據(jù)庫中記錄結果等。在另一個示例中,幫助臺(Help Desk)應用程序響應于被呼叫方的應答播放一系列交互式語音提示/消息并且可以將連接在線客服通話作為一種選項等。在又一個示例中,股市或銀行交易應用程序響應于被呼叫方的應答播放一系列交互式語音提示/消息并且利用后端數(shù)據(jù)庫或web應用程序來進行正當交易等。
后面的示例通常被稱為自助式應用程序。在語音領域,自助式應用程序被稱為IVR0 IVR涉及交互式語音應答并且是一種與電話呼叫方自動交互的技術。企業(yè)正越來越多地轉向IVR以降低常規(guī)的銷售、服務、催收催繳、查詢和支持公司往來通話的成本。如前所述,IVR是一種自助式應用程序的具體示例,其中用戶可以通過與應用程序交互而自助地執(zhí)行某些任務。傳統(tǒng)的IVR僅允許用戶通過語音信道與其交互。類似地,網(wǎng)頁機器人(web bot)是一種允許用戶利用文本信道執(zhí)行任務的自助式應用程序。這種平臺的一個示例是在多信道環(huán)境中主持用語音、文本消息進行交互的IVR應用程序和其他客戶端。文本消息已經(jīng)隨著便攜式電話和計算設備的普及而變得非常流行。文本消息是通過點對點或一點對多點地交換文本消息來進行通信的一種形式。文本消息最常見的形式是電子郵件、網(wǎng)絡博客和短信。短信(“IM”)幾乎是實時地交換消息。現(xiàn)有多種專用的短信網(wǎng)絡,每一種都利用本地協(xié)議為每一個自身的客戶端提供頂服務。也存在開源并使用XMPP協(xié)議的頂網(wǎng)絡。XMPP是指可擴展消息處理與出席協(xié)議并且它是由Jabber開源組織在1999年開發(fā)的用于出席和實時通信的開放性XML技術集合。用于Java應用程序的XMPP服務已經(jīng)在Google Talk中實施作為XMPP擴展應用以使其兼容XMPP,這是一種由美國加州Google公司提供的聊天應用程序。這通過將XMPP消息封裝為MME消息并且將MME消息置于HTTP內而實現(xiàn)。因此從應用程序的角度看,實際上接收的是HTTP消息而且必須使用Google專用API以從HTTP消息內的MME消息中提取出XMPP消息。這種方法并不完全兼容基于標準的Java servlet模型。希望獲得一種允許與文本消息的客戶端交互的自助式應用程序。因此希望獲得一種融合通信應用程序平臺,其類似于供web客戶端使用的HTTPServlet和供語音客戶端使用的SIP Servlet,允許在應用程序的服務器端輕松地開發(fā)和執(zhí)行應用程序。
發(fā)明內容
一種通信系統(tǒng)和方法,包括在Java虛擬機內主持交互式語音應答或自助式應用程序的服務器。為了發(fā)揮Java servlet模型的優(yōu)勢和功能,一種Java XMPP(可擴展消息處理與出席協(xié)議)servlet容器被提供給服務器使用以使得通信應用程序可以用由XMPPservlet API定義的對象以及用由基于標準的Java EE平臺例如HTTP和SIP servlet定義的對象來編寫,目的是為了服務于XMPP客戶端。除了 Java servlet模型中通用的類對象以外,API還提供了 XMPP專用的類對象
口 OJava XMPP servlet容器包括在傳輸層用于處理網(wǎng)絡連接的網(wǎng)絡點,用于管理XMPP會話和流的XMPP服務層以及用于管理XMPP節(jié)的應用層。應用程序允許用Java XMPP servlet API編寫,目的是為了發(fā)揮Java servlet模型的優(yōu)勢和功能,以使得編程不必關注底層的傳輸和連接功能而是能夠集中在業(yè)務邏輯上。Java XMPP servlet容器的架構使流的協(xié)商終止于XMPP服務層而不是應用層。這就允許應用程序具有在云計算資源中從一個服務器移植到另一個服務器的可移植性。
本發(fā)明的更多目標、特征和優(yōu)點將根據(jù)以下對其優(yōu)選實施例的說明而得到理解,這些說明內容應該與附圖相結合。
圖1示意性地示出了適合用于實踐本發(fā)明的通信應用程序環(huán)境。圖2示出了用于XMPP Servlet模型的系統(tǒng)架構。圖3示出了用于XMPP Servlet模型的應用程序整體架構。圖4示出了 XMPP Servlet接口的繼承。圖5更加詳細地示出了圖4中所示的XMPP Servlet接口。圖6示出了 XMPP Servlet的結構,給出了 XMPP Servlet請求和應答對象的整體繼承架構。
具體實施例方式圖1示意性地示出了適合用于實踐本發(fā)明的通信應用程序環(huán)境。通信應用程序環(huán)境10包括與應用程序平臺100內的通信應用程序服務器200交互的一個或多個客戶端20,22,30。應用程序平臺100主持由用面向對象軟件編寫的應用程序腳本210明確的應用程序。通信應用程序服務器200包括用于解讀并執(zhí)行應用程序腳本210的瀏覽器220。應用程序腳本210的執(zhí)行調用應用程序服務器200內的一個或多個服務器端組件310。正如隨后要更加詳細介紹的那樣,服務器端組件優(yōu)選地實施為符合基于標準的Java Servlet模型的Servlet 310。在客戶端和通信服務器中,這些組件310為HTTP請求、對一個或多個媒體服務器230的通話控制和媒體控制以及跟后端系統(tǒng)240例如數(shù)據(jù)庫和業(yè)務邏輯與遺留系統(tǒng)例如CRM(客戶關系管理)和ERP(企業(yè)資源規(guī)劃)的交互提供服務。這種平臺的一個示例是在多信道環(huán)境中主持用語音、文本消息進行交互的IVR應用程序和其他客戶端。文本消息已經(jīng)隨著便攜式電話和計算設備的普及而變得非常流行。文本消息是通過點對點或一點對多點地交換文本消息來進行通信的一種形式。文本消息最常見的形式是電子郵件、網(wǎng)絡博客和短信。短信(“IM”)幾乎是實時地交換消息?,F(xiàn)有多種專用的短信網(wǎng)絡,每一種都利用本地協(xié)議為每一個自身的客戶端提供頂服務。也存在開源并使用XMPP協(xié)議的頂網(wǎng)絡。XMPP是指可擴展消息處理與出席協(xié)議并且它是由Jabber開源組織在1999年開發(fā)的用于出席和實時通信的開放性XML技術集合。圖1實際上示出了一種多信道、自助式的應用程序平臺。基本上,多信道自助式的應用程序平臺100主持一種或多種用于通過多信道與各種客戶端交互的自助式應用程序300。不同的客戶端包括通信模式是借助于語音信道的語音客戶端20,22。還包括通信模式是借助于文本消息信道的文本消息客戶端30。通信應用程序服務器200通過Servlet容器330使頂客戶端30借助頂網(wǎng)絡直接或間接地與頂(XMPP)服務器互動。另外,實施為供servlet容器330使用的插件程序的應用程序路由器338用于客戶端到適當應用程序的路徑選擇??梢园l(fā)現(xiàn)語音應用程序中的某些動作與文本消息應用程序之間的對應性。例如,播放音頻文件類似于用IM發(fā)送文件,記錄通話類似于記錄文本消息的對話,傳輸通話類似于建立(涉及多個頂用戶的)聊天等。文本消息客戶端30與應用程序平臺100內主持的自助式應用程序進行交互應該就像自助式應用程序是網(wǎng)頁機器人一樣。文本消息的常用類型是短信(“IM”),其中文本消息幾乎實時地在各方之間交換。開源的頂客戶端(OS)或(XMPP客戶端)與具有XMPP服務器的開源網(wǎng)絡通信。各種本地IM網(wǎng)絡的不例有AOL Instant Messenger、MSN Messenger>Yahoo Messenger、Lotus Sametime、Google Talk 等。通常,每一種IM網(wǎng)絡都根據(jù)其自身的本地協(xié)議工作并且它們不能協(xié)同工作。另一種類型的IM網(wǎng)絡如前所述以XMPP的開放性標準為基礎。Jabber服務器為其客戶端提供頂服務。Google Talk是基于XMPP標準的另一個例子。優(yōu)選地,XMPP服務器50被用作供多信道自助式應用程序平臺使用以與各種不同的IP網(wǎng)絡協(xié)同工作的橋梁。傳輸模塊(未示出)隨XMPP服務器50—起使用以用作連往各種頂網(wǎng)絡的XMPP網(wǎng)關。對于XMPP服務器50來說,多信道自助式應用程序平臺100僅僅是另一個XMPP客戶端40。用這種方式,各種IM客戶端30就能夠通過傳輸模塊和XMPP服務器50與多信道自助式應用程序平臺100通信。當頂客戶端30已經(jīng)是XMPP網(wǎng)絡的一部分時,它就不再需要通過傳輸模塊“傳輸”,而是簡單地直接與XMPP服務器對話即可。在傳統(tǒng)的網(wǎng)絡傳播模式中,運行網(wǎng)絡瀏覽器的客戶機形式的用戶代理向網(wǎng)絡服務器發(fā)出請求。網(wǎng)絡服務器返回對請求的應答。通信根據(jù)HTTP (超文本傳輸協(xié)議)進行。具體地,網(wǎng)絡瀏覽器請求網(wǎng)絡資源例如由來自網(wǎng)絡服務器的網(wǎng)址明確的網(wǎng)頁。通常網(wǎng)絡服務器通過返回請求的網(wǎng)頁來應答。網(wǎng)頁可以包含文本內容以及用于讓瀏覽器在網(wǎng)頁中顯示文本的嵌入指令。在更為復雜的應用程序中,網(wǎng)頁經(jīng)常通過使用服務器端程序動態(tài)生成并且可以加入例如來自后端數(shù)據(jù)庫的查詢結果等內容。因此,部分內容并非硬編碼在網(wǎng)頁上而是由網(wǎng)絡服務器動態(tài)地生成和顯示。服務器端程序也可以用于將數(shù)據(jù)從客戶端提交至后端數(shù)據(jù)庫。通常,這些服務器端程序被實施為符合CGI (通用網(wǎng)關接口)協(xié)議的腳本。CGI是在網(wǎng)頁服務器上執(zhí)行任務以生成并顯示動態(tài)內容或者執(zhí)行其他后端功能的代碼模塊。但是,CGI具有若干缺點。首先,CGI不太容易移植,原因在于不同的網(wǎng)絡服務機器具有不同的處理器且操作系統(tǒng)可能需要它們自用版本的腳本。其次,CGI不能高效地使用服務器的資源。不同的CGI與啟動它們的服務器相比在不同的進程上下文中運行。對于每一個請求都有創(chuàng)建一個新進程的開銷,并且不同的進程無法訪問服務器資源中的公共集。JAVA servlet模型解決了 CGI的這些缺點。Servlet是用高度可移植性的JAVA 編程語言編寫的模塊,原因在于它們是在相同的與處理器硬件或操作系統(tǒng)無關的JAVA虛擬機中運行。在面向對象的Java編程語言中,分析HTTP請求并使之與軟件對象交互,軟件對象根據(jù)由應用程序操作的實際對象建模。類似地,應答被加工為符合HTTP協(xié)議并隨后發(fā)送給請求者。Servlet運行在Java服務器的多線程環(huán)境中并且允許通過單獨的線程來處理每一個請求。與并發(fā)請求需要載入多份CGI腳本副本的CGI相比,還有一種Java腳本的情況則需要載入到處理器內存中。原始Servlet符合HTTP協(xié)議并且可以被視為“HTTPservlet”。Servlet模型提供了通過在應用程序服務器內載入對應的servlet容器而實現(xiàn)的API (應用程序設計接口)集合。Servlet模型使開發(fā)人員能夠快速開發(fā)應用程序并將其移植到不同的服務器并且能夠高效運行。Servlet模型在web應用程序中廣泛使用并且以開放性的標準為基礎。API是一種描述用于跟組件310所用函數(shù)集合交互的接口的縮寫。它是一種包含在庫內包括的并且解決特定問題的函數(shù)集合說明的列表。在Java面向對象語言的當前上下文中,API包括Java類定義和擴展類定義的集合以及與類相關聯(lián)行為的集合的說明。API可以被認為是通過類(類接口)公開的所有方法的全集。這就意味著API規(guī)定了用于處理由類定義得出的對象的方法。對于通話控制,已經(jīng)提出了用于協(xié)同工作能力的多種協(xié)議標準。例如,H.323標準是一種由ITU (國際電信聯(lián)盟)推薦的用于IP技術的信令和通話控制的協(xié)議標準。一種越來越普及的替代H.323用于通話控制的標準是SIP( “會話發(fā)起協(xié)議”)。SIP是一種IETF(互聯(lián)網(wǎng)工程任務組)協(xié)議,用于IP技術的信令和通話控制以及兩臺或多臺終端之間的多媒體通信。這種協(xié)議基于文本并且更加以網(wǎng)絡為中心,因此是一種相對簡單和更加輕量級的替代H.323的協(xié)議。對于通話控制,SIP servlet已經(jīng)被開發(fā)并確立為用于根據(jù)SIP協(xié)議處理請求的標準,正如HTTP servlet根據(jù)HTTP協(xié)議處理請求一樣。SIP Servlet Specification (JSR 289)是一種基于容器的方法(根據(jù) HTTPservlet傳播模式建模)以利用會話發(fā)起協(xié)議(SIP)開發(fā)通信應用程序。SIP servlet是一種執(zhí)行SIP信令的Java編程語言服務器端組件。SIPservlet由SIP servlet容器管理,其通常是實現(xiàn)SIP的應用程序服務器的一部分。SIP servlet通過響應輸入的SIP請求并返回對應的SIP應答而與客戶端交互。SIP servlet由Java Servlet Specif ication提供的通用 servlet API 構建,Java Servlet Specif ication 是一種通過 Java 規(guī)范請求(JSR)過程由Java Communi ty Proces s (SM) Program建立的開放性標準。將SIP ServletQSR 289)用于通話控制是為了發(fā)揮Servlet模型的優(yōu)勢。由此,應用程序開發(fā)人員就能夠根據(jù)開放性標準JSR 289開發(fā)出底層通話控制對象方面的通信應用程序組件以及HTTP Servlet和SIP Servlet形式的API。因此希望能夠在以XMPP協(xié)議工作的Servlet模型基礎上提供API集合。現(xiàn)有的Java Servlet模型例如HTTP Servlet和SIP Servlet均以請求-應答模型為基礎。在HTTP的情況下,交互是同步的。在SIP的情況下,交互是異步的。盡管HTTPServlet基本上是無狀態(tài)的,但是SIP Servlet在會話中必須保持狀態(tài)。在XMPP的情況下,交換的是頂消息并且不存在固有的請求-應答概念。交互基本上是異步的,不過握手交互可以是同步的。類似地,IM基本上是無狀態(tài)的。但是,在使用頂客戶端與自助式應用程序交互時需要保持狀態(tài)。因此XMPP servlet規(guī)格必須要克服這些差異。XMPP SERVLET 和 API可擴展消息處理與出席協(xié)議(XMPP)是一種用于近實時消息處理、出席和請求-應答服務的開放性可擴展標記語言XML協(xié)議。XMPP的核心特性在由XMPP StandardsFoundation(原 Jabber Software Foundation)維護的 Extensible Messaging andPresence Protocol =Core [RFC3920]中定義。核心特性包括XMPP的專用特性例如XML流、TLS和SASL的使用以及根流的<message/>、〈presence/>和<IQ/>子流。這些特性提供了用于多種類型的近實時應用程序例如Core[RFC3921]中定義的短信(頂)和出席應用程序的構建模塊。所有通信架構中很重要的一方面就是可編程性,并且XMPP Servlet API的用途就是將用于提供基于XMPP服務的平臺標準化。術語平臺在此被用于包括Java API自身以及涵蓋封裝和部署應用程序的標準。平臺主要提供[RFC 3920]中定義的核心XMPP特性和架構功能,以使XMPP應用程序例如XMPP IM應用程序能夠簡單地在平臺上構建。XMPP Servlet API能夠提供以下優(yōu)點:XMPP的功能:允許應用程序實現(xiàn)相當完整的XMPP功能集合,包括流特性協(xié)商、SASL功能、節(jié)的接收和輸送。簡單性:容器處理“非關鍵性的”復雜事務例如管理網(wǎng)絡偵聽點、節(jié)的路由、流特性協(xié)商等。因此應用程序能夠在其具體的應用規(guī)則上。融合應用程序:可以讓容器支持融合應用程序,也就是跨越多種協(xié)議和接口例如Web、頂、SIP和其他Java EE接口的應用程序。第三方應用程序開發(fā)=Servlet模型支持第三方應用程序開發(fā)。XML部署描述符被用于從應用程序開發(fā)人員向部署人員傳遞應用程序信息。電信運營商級=Servlet在容器管理的會話對象內存儲應用程序。實現(xiàn)可以堅持和/或復制該數(shù)據(jù)以實現(xiàn)高度的可用性。XMPP Servlet是一種由XMPP Servlet容器管理的基于Java的應用程序組件,就像HTTP Servlet是由HTTP容器管理一樣。XMPP Servlet執(zhí)行XMPP應用程序功能例如表現(xiàn)為XMPP頂應用程序的XMPP Servlet。XMPP Servlet負責用于根據(jù)應用程序規(guī)則進行XMPP節(jié)處理,例如通過發(fā)送探測出席節(jié)和廣播出席節(jié)來處理初始出席節(jié)。XMPP Servlet還能通過經(jīng)XMPP Servlet API與容器交互來控制流協(xié)商過程。就像其他基于Java的組件一樣,Servlet是平臺獨立的Java類,可被編譯成平臺中立的能夠Java實現(xiàn)的XMPP應用程序服務器動態(tài)載入和運行的字節(jié)碼。容器,有時被稱為Servlet引擎,是提供Servlet功能的服務器擴展。XMPP Servlet通過經(jīng)Servlet容器交換節(jié)而與XMPP客戶端或其他的XMPP服務器交互。Servlet容器是提供網(wǎng)絡服務的在其上接收和發(fā)送請求及應答的應用程序服務器的一部分。它決定調用哪一個應用程序。Servlet container還在其生命周期內包含并管理Servlet。XMPP Servlet容器在與其他的XMPP實體連接之后負責用于管理連接和XMPP流,而且容器接收輸入的節(jié),將節(jié)分配給合適的Servlet以及從應用程序接收輸出的節(jié)并將其路由至合適的XMPP實體。Servlet容器能夠構建在或者可以安裝在實現(xiàn)Servlet的應用程序服務器內。XMPP Servlet容器管理網(wǎng)絡偵聽點,在其上偵聽輸入的XMPP流量(偵聽點是傳輸協(xié)議、IP地址和端口編號的組合)。Servlet容器可以在執(zhí)行Servlet的環(huán)境中設置安全限制。在 Java 5 Platform Standard Edition(J2SE 5.0)或 Java' Platform,Enterprise Edition 5 (Java EE 5)的環(huán)境中,這些限制應該利用由Java平臺(JavaPlatform)定義的許可架構設置。例如,高端應用程序服務器可以限制創(chuàng)建Thread對象以確保容器中的其他組件不會受到不利影響。圖2示出了用于XMPP Servlet模型的系統(tǒng)架構。整體系統(tǒng)包括如圖1所示與應用程序服務器200 (容器330+應用程序300)交互的XMPP客戶端24,40和其他的XMPP服務器50。實現(xiàn)XMPP Servlet模型就是實現(xiàn)作為servlet容器330之一的XMPP Servlet容器332。XMPP Servlet容器332可以根據(jù)XMPP協(xié)議與其他XMPP實體通信,包括XMPP客戶端40和其他的XMPP服務器50 (同樣參見圖1)。從XMPP Servlet容器的角度看共有三層通信。第一層是傳輸層340。在優(yōu)選實施例中,TCP被用作傳輸協(xié)議。傳輸層內的網(wǎng)絡點接收來自XMPP客戶端24,40或其他XMPP服務器50的輸入TCP連接并且建立到XMPP客戶端24,40或其他XMPP服務器50的輸出TCP連接。網(wǎng)絡點組件保持這些連接并向更高層發(fā)送輸入數(shù)據(jù)和必要信息,而且還從更高層接收輸出數(shù)據(jù)并將其送出。第二層是流層,在此XMPP流在XMPP服務層342內進行處理。[RFC3920]中的流概念被映射至XMPP Servlet API中的XmppSession接口,以使該層實際上負責用于保留XmppSession信息并向更高層提供會話信息。如圖1所示,應用程序路由器338是用于XMPP Servlet容器332的插件程序。在初始連接協(xié)商期間,容器332從客戶端或其他實體接收〈stream〉打開標簽請求并在XMPP服務層342處理該請求,隨后向應用程序服務器338發(fā)送關于選擇哪一個應用程序的查詢。應用程序服務器338根據(jù)路由表或預定規(guī)則返回應用程序選擇的答復。XMPP服務層342隨后調用選中的應用程序并建立連接。第三層是節(jié)層,在此處理XMPP節(jié)。在節(jié)層,節(jié)從應用程序312,322進出。節(jié)實際上被封裝在Servlet請求和應答中,以使應用程序也能從請求或應答中獲得除了節(jié)信息以外的XmppSession或連接信息。Java XMPP servlet容器的架構使流的協(xié)商終止于XMPP服務層而不是應用層。這就允許應用程序具有在云計算資源中從一個服務器移植到另一個服務器的可移植性。圖3示出了用于XMPP Servlet模型的應用程序整體架構。XMPP Servlet容器332管理應用程序和Servlet。可以將多于一個應用程序312,322部署至容器322,并且一個應用程序312可以包含多于一個Servlet314,316。但是,在一個應用程序中只能有一個主Servlet (MAIN Servlet)。容器管理一個應用程序中所有Servlet的生命周期,但是它僅將輸入請求分配給MAIN Servlet,并且隨后MAIN Servlet即可通過應用程序自身的業(yè)務規(guī)則將請求分配給其他的Servlet。每一個應用程序在部署時都必須有部署描述符,描述符描述應用程序的性質和載入的Servlet。通過讀取描述符容器即可獲知如何初始化應用程序以及載入哪些Servlet和如何配置它們。正如同樣結合圖2介紹的那樣,XMPP Servlet容器302在網(wǎng)絡點340保持所有的網(wǎng)絡連接,并且在XMPP服務層342保留XMPP流信息。以下給出頂出席的一個示例。在RFC3921內定義的XMPP頂應用程序中,在建立會話后,客戶端為了表示其通信可用性而向服務器發(fā)送初始出席信號。由應用程序和容器執(zhí)行的步驟如下:I)在流協(xié)商后,在客戶端和服務器之間建立會話。2)客戶端向服務器發(fā)送出席節(jié)。3)容器從偵聽的網(wǎng)絡終端接收出席節(jié)。4)容器通過使用XML分析程序分析節(jié)來驗證節(jié),在驗證其為有效XML元素后,容器根據(jù)XMPP核心協(xié)議(RFC3920)驗證出席節(jié),例如驗證來自屬性是流協(xié)商過程中已經(jīng)過確認的內容。
5)在驗證節(jié)之后,容器查找應該調用的合適Servlet并隨后用封裝在Servlet請求中的出席節(jié)來調用它。6) Servlet從容器接收經(jīng)過驗證的出席節(jié),然后根據(jù)頂應用程序進行處理,例如在“subscription”屬性設定為“to”或“both”值時向用戶名單中存在JID的聯(lián)系人發(fā)送探測出席節(jié),在“subscription”屬性設定為“from”或“both”值時向用戶名單中存在JID的聯(lián)系人廣播出席節(jié)。7)容器接收由Servlet發(fā)送的節(jié)并根據(jù)XMPP核心協(xié)議中定義的用于路由節(jié)的服務器規(guī)則將其路由至合適的實體。Servlet 接 口圖4示出了 XMPP Servlet接口的繼承。Servlet接口是Servlet API并且因此是XMPP Servlet API的核心抽象。所有的Servlet都直接實現(xiàn)該接口或者更通常地是通過擴展實現(xiàn)該接口的類而實現(xiàn)該接口。通用的Servlet API定義了實現(xiàn)Servlet接口的類GenericServlet0 XMPP Servlet API 定義了擴展 GenericServlet 并且根據(jù)接收到的消息類型執(zhí)行分配的類XmppServlet。對于絕大多數(shù)情況,開發(fā)人員都應擴展XmppServlet以實現(xiàn)他們的Servlet。圖5更加詳細地示出了圖4中所示的XMPP Servlet接口。用于XMPP消息的對象模型XMPP消息由Servlet容器處理。基本的Servlet接口定義了用于處理客戶端請求的服務方法。對Servlet容器路由至Servlet實例的每一條消息都調用該方法。在Servlet應用程序中處理并發(fā)消息通常都需要開發(fā)人員設計出能夠在特定時刻應對在服務中運行多線程的Servlet。通常,Servlet容器通過在不同線程上并發(fā)執(zhí)行服務方法來處理對同一Servlet的并發(fā)請求。調用XMPP Servlet以處理所有的輸入節(jié)。在任何情況下,節(jié)都被封裝在ServletRequest消息或ServletResponse消息內并通過Servlet接口中的服務方法輸送。void service(ServletRequest req, ServletResponse res)throws ServletException, java.10.1OException ;如果消息是請求,那么應答自變量必須是空值,而如果消息是應答,那么請求自變量必須是空值。自變量在被調用以處理XMPP事件時必須根據(jù)可能的情況實現(xiàn)對應的接口。例如,如果是IQ設定節(jié),那么必須實現(xiàn)IQRequest接口,而如果是IQ結果節(jié),那么必須實現(xiàn)IQResponse接口。XmppServlet實現(xiàn)的服務方法分別將輸入消息分配給用于請求的doRequest方法和用于應答的doResponse方法:Protected void doRequest(XmppServletRequest req);Protected void doResponse(XmppServletResponse resp);這些方法隨后如以下的表I和表2中所述進行進一步分配。XMPP Servlet抽象子類定義超出基本Servlet接口可用范圍的多種方法。這些方法由類中的doRequest方法自動調用(并且由服務間接調用)以幫助處理基于XMPP的請求。表I列出了用于XMPP Servlet的請求處理方法:
權利要求
1.一種服務器,包括: 應用程序,以用于可擴展消息處理與出席協(xié)議(XMPP)的Java servlet API編寫并且在用于為XMPP實體服務的Java虛擬機上執(zhí)行; Java XMPP servlet容器,支持用于XMPP的Java servlet API以處理XMPP專用的網(wǎng)絡傳輸、流和節(jié); 所述Java XMPP servlet容器進一步包括: 位于傳輸層的網(wǎng)絡點,用于偵聽、路由和管理與XMPP實體之間的網(wǎng)絡連接; XMPP服務層,用于通過所述網(wǎng)絡點管理與XMPP實體之間的XMPP會話和流;以及 應用層,用于通過所述XMPP服務層管理與XMPP實體之間的XMPP節(jié)。
2.按權利要求1所述的服務器,其中: 所述Java XMPP servlet容器執(zhí)行的基本功能包括: 管理網(wǎng)絡偵聽點; XMPP TLS協(xié)商以及在應用程序被設置為使用容器管理安全性時的SASL協(xié)商; 資源整合;以及 XML分析。
3.按權利要求1所述的服務器,進一步包括: 應用程序路由器,由所述Java XMPP servlet容器調用以選擇XMPP servlet應用程序為初始請求服務。
4.按權利要求3所述的服務器,其中: 初始請求包含有屬性;并且 應用程序路由器根據(jù)屬性值選擇合適的應用程序。
5.按權利要求1所述的服務器,其中: Java XMPP servlet API 定義了擴展通用 Java servlet API 的類;并且通用Java servlet API定義了為基于標準的Java servlet模型中的通用特性提供API的通用類。
6.按權利要求5所述的服務器,其中: 通用Java servlet API接口定義了用于處理客戶端請求的服務方法; 對servlet容器路由至servlet實例的每一條消息都調用所述服務方法;并且 由XMPP servlet處理的XMPP節(jié)被封裝在通過所述服務方法輸送的消息內。
7.按權利要求1所述的服務器,其中: Java XMPP servlet API定義了不同的接口,專門用于處理不同類型的XMPP流,包括處理流打開標簽、流關閉標簽、流錯誤xml元素和流特性xml元素。
8.按權利要求1所述的服務器,其中: Java XMPP servlet API定義了不同的接口,專門用于處理不同類型的XMPP節(jié),包括出席節(jié)、IQ設定節(jié)和消息節(jié)。
9.按權利要求1所述的服務器,其中: Java XMPP servlet API定義了不同的接口,專門用于處理不同類型的XMPP SASL協(xié)商,包括SASL授權請求、SASL質詢、SASL應答、SASL終止、SASL失敗和SASL成功。
10.按權利要求1所述的服務器,其中:Java XMPP servlet API定義了用于處理XMPP IQ結果或錯誤節(jié)的接口。
11.一種操作服務器的方法,包括: 部署以用于可擴展消息處理與出席協(xié)議(XMPP)的Java servlet API編寫的應用程序; 提供Java XMPP servlet容器,支持用于XMPP的Java servlet API以處理XMPP專用的網(wǎng)絡傳輸、流和節(jié); 所述Java XMPP servlet容器進一步包括: 位于傳輸層的網(wǎng)絡點,用于偵聽、路由和管理與XMPP實體之間的網(wǎng)絡連接; XMPP服務層,用于通過所述網(wǎng)絡點管理與XMPP實體之間的XMPP會話和流;以及 應用層,用于通過所述XMPP服務層管理與XMPP實體之間的XMPP節(jié);并且 在所述服務器的Java虛擬機上執(zhí)行應用程序以為XMPP實體服務。
12.按權利要求11所述的方法,其中: 所述Java XMPP servlet容器執(zhí)行的基本功能包括: 管理網(wǎng)絡偵聽點; XMPP TLS協(xié)商以及在應用程序被設置為使用容器管理安全性時的SASL協(xié)商; 資源整合;以及 XML分析。
13.按權利要求11所述的方法,進一步包括: 提供應用程序路由器,由所述Java XMPP servlet容器調用以選擇XMPP servlet應用程序為初始請求服務。
14.按權利要求13所述的方法,其中: 初始請求包含有屬性;并且 應用程序路由器根據(jù)屬性值選擇合適的應用程序。
15.按權利要求11所述的方法,其中: Java XMPP servlet API 定義了擴展通用 Java servlet API 的類;并且通用Java servlet API定義了為基于標準的Java servlet模型中的通用特性提供API的通用類。
16.按權利要求15所述的方法,其中: 通用Java servlet API接口定義了用于處理客戶端請求的服務方法; 對servlet容器路由至servlet實例的每一條消息都調用所述服務方法;并且 將由XMPP servlet處理的XMPP節(jié)封裝在通過所述服務方法輸送的消息內。
17.按權利要求11所述的方法,其中: Java XMPP servlet API定義了不同的接口,專門用于處理不同類型的XMPP流,包括處理流打開標簽、流關閉標簽、流錯誤xml元素和流特性xml元素。
18.按權利要求11所述的方法,其中: Java XMPP servlet API定義了不同的接口,專門用于處理不同類型的XMPP節(jié),包括出席節(jié)、IQ設定節(jié)和消息節(jié)。
19.按權利要求11所述的方法,其中: Java XMPP servlet API定義了不同的接口,專門用于處理不同類型的XMPP SASL協(xié)商,包括SASL授權請求、SASL質詢、SASL應答、SASL終止、SASL失敗和SASL成功。
20.按權利要求11所述的方法,其中: Java XMPP servle t API定義了用于處理XMPP IQ結果或錯誤節(jié)的接口。
全文摘要
一種通信系統(tǒng)和方法,包括在Java虛擬機內主持交互式語音應答或自助式應用程序的服務器。為了發(fā)揮Java servlet模型的優(yōu)勢和功能,一種Java XMPP(可擴展消息處理與出席協(xié)議)servlet容器被提供給服務器使用以使得通信應用程序可以用由XMPP servlet API定義的對象以及用由基于標準的Java EE平臺例如HTTP和SIP servlet定義的對象來編寫,目的是為了服務于XMPP客戶端。除了Java servlet模型中通用的類對象以外,API還提供了XMPP專用的類對象集合。Java XMPP servlet容器包括在傳輸層用于處理網(wǎng)絡連接的網(wǎng)絡點,用于管理XMPP會話和流的XMPP服務層以及用于管理XMPP節(jié)的應用層。
文檔編號H04L12/58GK103098433SQ201180029966
公開日2013年5月8日 申請日期2011年4月18日 優(yōu)先權日2010年4月18日
發(fā)明者陳為, 祝效普, 劉志雨, 張普兵 申請人:Voxeo研究有限公司