基于Jabber協(xié)議的移動即時通訊系統(tǒng)研究與實現_第1頁
基于Jabber協(xié)議的移動即時通訊系統(tǒng)研究與實現_第2頁
基于Jabber協(xié)議的移動即時通訊系統(tǒng)研究與實現_第3頁
基于Jabber協(xié)議的移動即時通訊系統(tǒng)研究與實現_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、基于基于 JabberJabber 協(xié)議的移動即時通訊系統(tǒng)研究與實現協(xié)議的移動即時通訊系統(tǒng)研究與實現摘摘要要本文利用支持 Jabber 協(xié)議的開源服務器 WildFire,在基于 J2ME 平臺的手機上實現了一個移動即時通訊系統(tǒng),該系統(tǒng)不但具有傳統(tǒng)即時通訊的文本信息傳遞功能,還具備拍照、傳遞照片、群組聊天以及查看資訊等功能。關鍵字關鍵字J2ME;即時通訊;Jabber;WildFire;XML;XMPP1課題研究背景移動 IM(Instant Message),也就是移動即時信息(即時通信、即時通訊)工具,是移動終端與即時通訊工具的結合。從最初的移動 QQ、手機 MSN,到陸續(xù)出現的“飛信”、

2、“超信”、“靈信”,當然還有不容忽視的 PICA,各類型的移動即時通訊工具讓用戶通過手機就可以與朋友或工作伙伴進行實時交談、互傳信息、娛樂消遣,它們正改變著我們的溝通模式甚至生活習慣。但長期以來各 IM 軟件廠商推出的 IM 軟件相互獨立,缺乏基于統(tǒng)一標準的互用性,使得各種 IM 系統(tǒng)之間無法互相發(fā)送信息,例如 AOL與 Yahoo,MSN 與 AOL,MSN 與 QQ 等,它們之間就不能相互通信。因此,制訂一種統(tǒng)一的協(xié)議就迫在眉睫,這種統(tǒng)一協(xié)議應當可用于 E-mail、Web和語音流的簡單郵件傳輸協(xié)議(SMTP)、HTTP 和實時協(xié)議(RTP)等 IM 應用。由Jabber 組織發(fā)展的 Ja

3、bber 協(xié)議,其中包含支持符合 IETF 規(guī)范的即時消息和Presence 技術的基本協(xié)議形成了 XMPP 協(xié)議,XMPP(Extensible Messaging andPresence Protocol,即可擴展消息處理現場協(xié)議)為用于現場的消息路由處理的 XML 數據流協(xié)議,被確立為 IETF 標準。本文的研究工作正是基于這一背景。 2總體方案設計 2.1總體思路移動 IM 采用的是客戶/服務器架構的體系結構,具有服務器端和客戶端,其中服務器可以分為兩個部分:Jabber 服務器和數據庫系統(tǒng)。服務器采用基于 Jabber 的開源服務器WildFire 3.0.1,用戶數據和系統(tǒng)信息的存

4、儲由 MySQL 數據庫實現,客戶端J2ME 進行開發(fā)。 2.2Jabber 與 WildFire 服務器Jabber 就像 ICQ,MSN 一樣,是一個基于 Internet 的即時通訊系統(tǒng),但是同這些即時通訊軟件不同的是,它是一個開放的即時通訊系統(tǒng),也是一個基于 XML Stream 的協(xié)議,用于在 Internet 上的兩個實體之間交換信息,現場狀態(tài)(presence)和其它的結構化信息。你可以自己架設自己的 Jabber 服務器,使用不同的 Jabber Client軟件,而不像 ICQ 或 MSN,依賴于 AIM 或 MSN 的服務器和軟件。IETF 已經將Jabber 定為即時通訊

5、和現場技術的標準協(xié)議,稱為 XMPP(ExtensibleMessaging and Presence Protocol),相關的規(guī)范是 RFC3920 和RFC3921。Wildfire 是一款獲得許多榮譽的 Jabber 即時消息服務器,采用 Java 開發(fā),可以使用任何支持 Jabber 的客戶端如 psi、gaim 等連接。其主要特點有易于安裝、管理、定制以及和其它應用程序集成,有基于 GPL 的開放源代碼版本和商業(yè)版本。 2.3J2ME 介紹J2ME 是 SUN 公司在小型設備上的開發(fā)平臺,它的主要技術優(yōu)勢在于:良好的跨平臺能力與 J2EE 后端無縫的結合能力和 Java 語言的優(yōu)良

6、特色,如簡單安全以及現有的 Java 平臺上的開發(fā)工具。 3關鍵技術研究 3.1與 MSN、OICQ 系統(tǒng)通訊Jabber服務器中的 Transport 組件是溝通 Jabber 和非 Jabber 協(xié)議之間差異的組件。當使用 Jabber 服務器訪問非 Jabber 系統(tǒng)時,Transport 組件隱藏了系統(tǒng)之間的差異,這樣,用戶在訪問的時候根本感覺不到自己訪問的是外部的系統(tǒng)。但是,當用戶第一次訪問非 Jabber 系統(tǒng)時,需要向 Jabber transport 注冊,注冊內容就是用戶名和將要使用的外部系統(tǒng)之類的信息。一旦注冊成功之后,就可以在外部系統(tǒng)上發(fā)送和接收消息。 3.2網絡連接策略

7、本文的移動即時通訊系統(tǒng)支持 Http和 Socket 兩種連接方式。其中,Socket 連接方式為默認連接方式,但是不同品牌和型號的手機以及中國移動各地區(qū)網絡對 Socket 的支持有差異,所以當Socket 連接不被支持的時候系統(tǒng)會自動切換到 HTTP 連接方式。此外,在國際上,使用 Http 連接方式通常只有一種 GPRS 接入方式,但中國有CMWAP 和 CMNET 兩種方式。其中 CMNET 擁有完全的 Internet 訪問權,而中國移動對 CMWAP 做了一定的限制,主要表現在 CMWAP 接入時只能訪問 GPRS 網絡內的IP(72:80),而無法通過路由訪問 I

8、nternet(少數地區(qū)的移動網絡可能不存在這一限制)。我們用 CMWAP 訪問 Internet 就是通過 WAP 網關協(xié)議或它提供的 HTTP 代理服務實現的。 3.3拍照及照片傳送技術客戶端通過 mobilemediaapi(mmapi)中的 videocontrol 來實現,通過調用videocontrol 的 getsnapshot()方法實現。然后,對數據進行 base64 編碼轉換為字符串嵌入 xml 流;服務器收到收據后解碼并利用 J2ME 的 Image 類還原圖像。 3.4消息傳遞中編碼考慮在系統(tǒng)實際開發(fā)中,我們通常面臨不同的移動終端,有些設備的編碼就必須特殊處理。比如,本

9、文采用 NOKIA 的S60 平臺機型,NOKIA S60 手機在接收 ISO8859-1 編碼時不是與大多數手機那樣直接以 UTF-8 編碼方式接收,它只支持 ISO8859-1 方式接收。但是這種方式接收后,封裝在 ISO8859-1 流中的 xml 的數據會又一次被進行 ISO8859-1 編碼轉換,等于是在對這條封裝在 ISO8859-1 流中的 xml 語句又封裝了一個 ISO8859-1 的外殼。所以客戶端要想得到 UTF-8 的數據,必須進行兩次編碼轉換,首先剝掉這層 ISO8859-1 的外殼,得到正常的 ISO8859-1 數據流,才能向其它機型那樣進行正常的 ISO8859

10、-1 向 UTF-8 編碼的轉換。 4關鍵模塊實現本文實現的移動即時通訊系統(tǒng)支持群組消息模式。在群組消息模塊中,登錄的注冊用戶可以通過手機來實現傳統(tǒng) PC 平臺的聊天室功能。Jabber的群組聊天或會議機制允許多人同時進行交流,這是對傳統(tǒng)即時通訊功能的擴展。具體的業(yè)務流程是首先由用戶讀取群組列表選擇登錄目標。然后,進行登錄并將用戶 ID 注冊到這個組中。完成注冊后,系統(tǒng)會將本組內的其它成員信息(比如成員列表)發(fā)送到當前用戶的客戶端上。這時系統(tǒng)的會話組件已經為這個群組內地成員做好了消息傳遞準備,也就是說某個用戶的信息可以被服務器傳遞到群組中的每一個成員。具體的實現過程如下: 4.1讀取群組列表名

11、單當用戶進入聊天室模塊時,客戶端首先發(fā)送一個 xml 語句向服務器發(fā)出請求,服務器收到后返回一個 xml 語句,客戶端解析后讀出聊天室列表,并進行屏幕顯示,供用戶選擇。 發(fā)送的 xml 語句: 接收的 xml 語句: 論文出處(作者):4.2用戶的在群組中的登記需要加入一個指定的群組時(它的 ID 已經由用戶指定或在接到聊天邀請時確定),首先發(fā)送一個元素。注意在發(fā)送中不要添加 resource 名,這是老的 groupchat 的做法,現在的conference 已經不采用了。如果你需要向下兼容性,可以發(fā)送 resourcename。接下來,發(fā)送包含 xmlns=”Jabber:iq:brow

12、se”的,這個請求包含了一個或多個元素,它指明了你希望加入的會議的別名。一旦你接到一個成功回應,也就意味著你已經加入這個聊天室??蛻舳私邮粘蓡T信息語句: 163 當客戶端開始接收信息時,就意味指著請求成功了,那么客戶端需要建立一個 GroupChat 實例,并且不斷將接收的信息添加到這個實例中。 4.3群組成員列表的讀取每個群組都有成員列表,表明當前在群組中的人員。它會隨著人員加入或離開而改變。本系統(tǒng)通過在 GroupChat 類中設置一個 MUCUser 的屬性,它是一個 Vector 的變量,每一個元素都是一個 MUCUser 實例,存放著每一個聊天室成員的個人信息,如 jid、昵稱、等級

13、、級別等??蛻舳嗣渴盏揭粭l presence 語句,解析后都會更新這個屬性。 群組成員的 presence 語句: 2 4 4.4群組中即時消息的發(fā)送一般來說群組消息傳遞時有兩種最基本的形式,一種是公共消息,就是對所有人發(fā)送的信息,這種信息當前群內的所有成員都可以收到;另一種是私有信息,這種信息其實是群中的點對點消息傳遞,也就是說雖然是在群中,但服務器只會將其發(fā)送給群組中指定的成員。在本系統(tǒng)的群組消息模塊中,成功的實現了這兩種方式。群組消息的格式與點對點消息傳遞的格式基本相同,它們都是通過 Message 對象進行封裝的。它們的區(qū)別在于 type類型一個是groupchat,而另一個是chat

14、。服務器端收到消息后,會根據 type 的值來判斷這條消息是否群組消息。下面各給出一條 xml 語句來說明:公共消息格式: 你好 私有消息格式: hello 在 Gm 即時通訊系統(tǒng)中,對于客戶端來說,一個聊天室就是一個 GroupChat 類型的對象,那么加入一個聊天室,本質上就是創(chuàng)建一個 GroupChat 對象的實例。對 GroupChat 實例的訪問我們可以群組消息傳遞的所有功能。GroupChat 類繼承了 Chat 類,而 Chat 類又繼承至Conversation 類,可以說它是一個由一個基本會話類不斷擴展而來的,即一個功能更強大的會話類。它的最主要的功能就是對當前聊天室內的成員

15、以及他們的發(fā)言進行管理,比如添加新的信息(新的發(fā)言)、成員的變更等等。GroupChat還有一個非常重要的方法,就是 broadcast()方法。通過這個方法將用戶的 jid信息,說話的對象,發(fā)言的內容等封裝為一個標準的 Message xml 語句,然后交給通訊線程發(fā)送出去。圖 1、圖 2 是軟件運行的部分功能截圖。圖 1群組消息傳遞截圖圖 2好友列表讀取顯示截圖5結論本系統(tǒng)不但實現了傳統(tǒng)即時通訊的文本信息傳遞功能,還具備了拍照、傳遞照片、群組聊天以及查看資訊等功能。另外,針對國內手機網絡和用戶的特點和現狀,系統(tǒng)對網絡連接進行了優(yōu)化。它能夠支持 Socket 和Http 兩種網絡連接方式,并

16、且當客戶端發(fā)現當前網絡和手機不支持 Socket 連接時,能夠自動切換到 Http 連接方式。此外,本文主要工作在Nokia、Motorola、SE 等品牌主流機型都得到實現,整個系統(tǒng)目前運轉正常,現注冊用戶已超過 50 萬,取得了一定的社會和經濟效益。 參考文獻 1.Jabber, Inc. Advantages of Jabber as a Platform for DevelopingCollaborative Applications, May 2002 2. Jabber, Inc. The Presence Valueof Presence: Leveraging your Instant Messaging Investment. August,2003 3. Shigeoka I. Instant Messaging in Java. 2002 4

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論