Android之基于xmpp openfire smack开发之openfire介绍和部署[1]
http://blog.csdn.net/forlong401/article/details/33730365
前言
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編程庫調試接口時會經常用到這個參數。
總結
以上是生活随笔為你收集整理的Android之基于xmpp openfire smack开发之openfire介绍和部署[1]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android之MVP 模式:简单易懂的
- 下一篇: Android之基于xmpp openf