基於xmpp openfire smack開發之openfire介紹和部署[1]

yangxi_001發表於2015-01-12

前言

Java領域的即時通訊的解決方案可以考慮openfire+spark+smack。當然也有其他的選擇。

Openfire是基於Jabber協議(XMPP)實現的即時通訊伺服器端版本,目前建議使用3.8.1版本,這個版本是當前最新的版本,而且網上可以找到下載的原始碼。

即時通訊客戶端可使用spark2.6.3,這個版本是目前最新的release版本,經過測試發現上一版本在視訊支援,msn閘道器支援上可能有問題,所以選擇openfire3.8.1+spark2.6.3是最合適的選擇。

Smack是即時通訊客戶端程式設計庫,目前我已測通通過jsp使用smack的API向openfire註冊使用者傳送訊息,並且可以通過監聽器獲得此使用者的應答訊息。

通過smack向msn使用者和QQ使用者,gtalk使用者傳送訊息應該也可以實現,關於向gtalk使用者傳送訊息的例子較多。這個留待以後研究。至少目前可以通過程式向spark發訊息了。對於區域網內部應用足以解決系統與使用者互動的問題,甚至可以做自動應答機器人。

Spark支援聊天,語音,視訊,會議,檔案收發,截圖,連線msn等功能。

1.什麼是XMPP

XMPP(Extensible Messaging and Presence Protocol),簡單的來講,它就是一個傳送接收處理訊息的協議,但是這個協議傳送的訊息,既不是二進位制的東東也不是字串,而是XML。正是因為使用了XML作為訊息傳遞的中介,Extensible 才談的上。XMPP的前身是Jabber,一個開源形式組織產生的網路即時通訊協議。XMPP目前被IETF國際標準組織完成了標準化工作。  

2.IM

Instant Messenger,及時通訊軟體,就是大家使用的QQ、MSN Messenger和Gtalk等等。其中Gtalk 就是基於XMPP 協議的一個實現,其他的則不是。當前IM 幾乎作為每個上網者必然使用的工具,在國外的大型企業中有一些企業級的IM應用,但是其商業價值還沒完全發揮出來。設想既然XMPP 協議是一個公開的協議,那麼每個企業都可以利用它來開發適合本身企業工作,提高自身生產效率的IM;甚至,你還可以在網路遊戲中整合這種通訊軟體,不但讓你可以邊遊戲邊聊天,也可以開發出適合遊戲本身的IM 應用,比如說一些遊戲關鍵場景提醒功能,團隊語音交流等等都可以基於IM來實現。

3.Spark,smack和Openfire

開源界總是有許多有趣的東東,這三個合起來就是一個完整的XMPP IM 實現。包括伺服器端——Openfire,客戶端——Spark,XMPP 傳輸協議的實現——Smack(記住,XMPP是一個協議,協議是需要實現的,Smack起到的就是這樣的一個作用)。三者都是基於Java 語言的實現。

Spark 提供了客戶端一個基本的實現,並提出了一個很好的外掛架構,這對於開發者來說不能不說是一個福音。我強烈建議基於外掛方式來實現你新增加的功能,而不是去改它的原始碼,這樣有利於你專案架構,把原始專案的影響降到最低。

Openfire 是基於XMPP 協議的IM 的伺服器端的一個實現,雖然當兩個使用者連線後,可以通過點對點的方式來傳送訊息,但是使用者還是需要連線到伺服器來獲取一些連線資訊和通訊資訊的,所以伺服器端是必須要實現的。Openfire 也提供了一些基本功能,但真的很基本的!慶幸的是,它也提供外掛的擴充套件,像Spark 一樣,同樣強烈建議使用外掛擴充套件的方式來增加新的功能,而不是修改人家的原始碼。

Smack 是一個XMPP 協議的Java 實現,提供一套可擴充套件的API,不過有些時候,你還是不得不使用自己定製傳送的XML 檔案內容的方式來實現自己的功能

下圖展示了三者之間的關係:

Spark 提供了客戶端一個基本的實現,並提出了一個很好的外掛架構,這對於開發者來說不能不說是一個福音。我強烈建議基於外掛方式來實現你新增加的功能,而不是去改它的原始碼,這樣有利於你專案架構,把原始專案的影響降到最低。

Openfire 是基於XMPP 協議的IM 的伺服器端的一個實現,雖然當兩個使用者連線後,可以通過點對點的方式來傳送訊息,但是使用者還是需要連線到伺服器來獲取一些連線資訊和通訊資訊的,所以伺服器端是必須要實現的。Openfire 也提供了一些基本功能,但真的很基本的!慶幸的是,它也提供外掛的擴充套件,像Spark 一樣。

Smack 是一個XMPP 協議的Java 實現,提供一套可擴充套件的API,不過有些時候,你還是不得不使用自己定製傳送的XML 檔案內容的方式來實現自己的功能。

4.安裝Openfire3.8.1

使用openfire需要配置機器的域名。如果區域網內沒有安裝域伺服器,則需要手工為機器配置域名,開啟C:\WINDOWS\system32\drivers\etc\hosts檔案,增加一新行:
127.0.0.1 csdn.shimiso.com (使用者根據自己的需要可配置稱別的名字,但最好符合帶.的域名格式)
其他機器使用域名訪問openfire,也需要在C:\WINDOWS\system32\drivers\etc\hosts中指定bzwang.tzsoft.com對應的ip地址,假設安裝openfire的主機IP為192.168.1.10,則hosts檔案中應增加一新行:
192.168.1.10 csdn.shimiso.com 
通過這種方式指定主機域名,建議安裝openfire的機器配置靜態ip地址以免ip發生改變。

語言選擇簡體中文,見下圖:

後續按照提示安裝,點選完成啟動openfire,最後出現下面的介面:

點”Launch Admin”,出現下面的頁面,頁面連線為http://127.0.0.1:9090/setup/index.jsp

語種選擇中文(簡體),點”Continue”:(下面的頁面如果出現英文,請重新整理一下頁面或者重新點Launch Admin)

這個頁面的Domain預設為機器名,請改為一開始設定的域名,例如csdn.shimiso.com,接著點Continue(繼續):

這個頁面中第一個選項,即標準資料庫連線,不要選擇嵌入的資料庫(Embedded Database,嵌入的資料庫是hsqldb資料庫,生產環境不要選擇此選項),然後點”繼續”:

這裡我用的是mysql資料庫,按官方要求最好是5.0以上,確保有個名字叫openfire的庫存在,配好後點繼續

這個頁面是配置是否使用LDAP,我們現在不配置LDAP,所以選擇 Default預設即可,點繼續:

這裡填寫郵箱和確認密碼後直接點繼續:
等待大約30秒左右,到此安裝和配置操作全部完成。開啟http://127.0.0.1:9090/login.jsp登入管理頁面

進入使用者/組新增一個使用者。

5.客戶端配置和除錯

這裡我沒用使用官方的spark客戶端,而是用了潘迪安如意通,配置截圖如下:

聊天演示:

從上面的聊天記錄我們發現所有的使用者id全稱都是:使用者名稱@域名/資源名,這個就是我們在XMPP協議中通常說說的JID,即jabber id,它是一個xmpp協議帳號系統的通稱,後面我們在使用smack程式設計庫除錯介面時會經常用到這個引數。

 

PS:本課程為原創如有雷同純屬巧合歡迎各種形式的技術交流,共同探討和斧正

轉載請標明出處http://blog.csdn.net/shimiso

相關文章