主要包含4個(gè)章節(jié):
1. Java 領(lǐng)域的即時(shí)通信的解決方案
2. 搭建 Openfire 服務(wù)器
3. 使用客戶端測試我們搭建的 Openfire 服務(wù)器
4. Smack 和 ASmack
一、Java領(lǐng)域的即時(shí)通信的解決方案
Java領(lǐng)域的即時(shí)通信的解決方案可以考慮openfire+spark+smack。
1. Openfire是基于Jabber協(xié)議(XMPP)實(shí)現(xiàn)的即時(shí)通信服務(wù)器端版本,目前最新的版本為3.6.4,網(wǎng)上可以找到下載的源代碼。
2. 即時(shí)通信客戶端可使用spark2.5.8,這個(gè)版本是目前最新的release版本,經(jīng)過測試發(fā)現(xiàn)上一版本在視頻支持。
3. Smack是即時(shí)通信客戶端編程庫,可以使用smack的API向openfire注冊用戶發(fā)送消息,并且可以通過監(jiān)聽器獲得此用戶的應(yīng)答消息,甚至可以做自動應(yīng)答機(jī)器人,后門我們會用到該API。
二、搭建Openfire服務(wù)器
2.1 準(zhǔn)備工作:配置主機(jī)的域名
使用openfire需要配置機(jī)器的域名。打開C:\WINDOWS\system32\drivers\etc\hosts文件,增加一新行:127.0.0.1 im.comit.com.cn
其他機(jī)器使用域名訪問openfire,也需要在C:\WINDOWS\system32\drivers\etc\hosts中指定im.comit.com.cn對應(yīng)的ip地址,例如我的局域網(wǎng)IP為192.168.0.177,則hosts文件中應(yīng)增加一新行:
192.168.0.177 im.comit.com.cn
可以ping一下剛才的域名im.comit.com.cn,驗(yàn)證是否配置正確:
2.2 準(zhǔn)備工作:創(chuàng)建openfire運(yùn)行所需的數(shù)據(jù)庫
下載openfire:openfire需要java運(yùn)行時(shí),由于我的機(jī)器已經(jīng)有了java開發(fā)環(huán)境,所以下載了免安裝版的zip壓縮包。
下載完解壓縮,我的目錄是:D:\Technology\XMPP\openfire。
需要?jiǎng)?chuàng)建openfire運(yùn)行所需的數(shù)據(jù)庫:我電腦已經(jīng)安裝了的是Sqlserver 2005。打開D:\Technology\XMPP\openfire\resources\database目錄:
打開Microsoft SQL Server Management Studio創(chuàng)建數(shù)據(jù)庫Openfire并運(yùn)行openfire_sqlserver.sql的腳本:
這里截取了一部分表。
由于openfire安裝包并沒有內(nèi)置SqlServer的jdbc驅(qū)動,所以需要從網(wǎng)上下載sqljdbc.jar并拷貝至以下目錄:D:\Technology\XMPP\openfire\lib。
2.3 開始安裝openfire
表創(chuàng)建完畢之后、運(yùn)行bin目錄下的openfire.exe。
選擇Launch Admin打開管理員界面:
選擇簡體中文,Continue下一步:
輸入2.1中配置的域名:im.comit.com.cn,端口默認(rèn)。繼續(xù):
這一步選擇標(biāo)準(zhǔn)數(shù)據(jù)庫,繼續(xù):
選擇SqlServer
驅(qū)動程序類輸入:com.microsoft.sqlserver.jdbc.SQLServerDriver
數(shù)據(jù)庫URL:jdbc:sqlserver://127.0.0.1;DatabaseName=Openfire
出入用戶名sa,密碼xxxxxx,其他默認(rèn)。點(diǎn)擊繼續(xù):
選擇“初始設(shè)置”,繼續(xù):
這里順便輸入游戲號以及密碼,說明:這一步是創(chuàng)建admin賬號,一定要記住密碼。繼續(xù):
系統(tǒng)提示openfire已經(jīng)安裝完成了。
在Microsoft SQL Server Management Studio ,打開表ofUser表,會看到剛才創(chuàng)建的admin賬號:
這個(gè)時(shí)候不要點(diǎn)“登錄到管理控制臺”,登錄肯定失敗,需要切換到這個(gè)頁面:
點(diǎn)”stop”,然后點(diǎn)“start”,等重啟動成功后點(diǎn)”Launch Admin”,進(jìn)入登錄頁面:
輸入admin和剛才創(chuàng)建的密碼,登錄:
從管理員界面,我們可以查看服務(wù)器名稱:im.comit.com.cn ;并且可以管理用戶組和用戶:
這里,通過管理界面插入一個(gè)test用戶(那么該用戶的jid為:teat@im.comit.com.cn,有關(guān)jid的定義在第二篇文章介紹XMPP協(xié)議時(shí)有介紹)。
到目前為止,openfire服務(wù)器基本搭建成功。
三、使用客戶端測試我們搭建的openfire服務(wù)器
主要測試用例包括:連接openfire服務(wù)器、在客戶端注冊用戶、在不同的基于XMPP協(xié)議的客戶端進(jìn)行添加好友請求以及發(fā)送即時(shí)消息。
1. Spark 客戶端:與openfire同一個(gè)開源組織的基于XMPP協(xié)議的客戶端
2. SparkWeb:基于Web的XMPP客戶端
3. 如意通(Rooyee Message,國內(nèi)公司開發(fā)的開源的基于XMPP、支持文件、音頻、視頻聊天、功能比較強(qiáng)悍的一款軟件,下載地址:http://rooyee.biz/a/xiazaizhongxin/ruanjianxiazai/index.html)
開始進(jìn)行測試:
安裝openfire服務(wù)器時(shí),我們創(chuàng)建了賬號test,現(xiàn)在我們使用Spark客戶端申請一個(gè)賬號test2,注意服務(wù)器輸入im.comit.com.cn。創(chuàng)建成功之后登錄。
在Microsoft SQL Server Management Studio ,打開表ofUser表,會看到剛才創(chuàng)建的test2賬號:
Rooyee Message的登錄設(shè)置與Spark類似,我們使用test賬號登錄Rooyee Message。
2款軟件都登錄成功之后。使用Spark登錄的test2 來向Rooyee Message登錄的test 發(fā)送聯(lián)系人添加請求。
桌面右下角Rooyee Message會彈出test2的請求對話框
同意請求之后,在聯(lián)系人列表就可以看到雙方在線的情況以及對方的注冊信息。
下面測試2款異構(gòu)的客戶端之間的通信(Spark是Java客戶端,Rooyee Message是用Delphi開發(fā)的客戶端,但兩者都是基于XMPP協(xié)議)。
Spark客戶端的消息。
Rooyee Message的消息框。
同時(shí)打開Openfire的后臺,我們可以看到兩者的的回話信息:
到現(xiàn)在服務(wù)器和客戶端都已經(jīng)準(zhǔn)備測試通過了。
從中我們可以發(fā)覺XMPP協(xié)議的開放性。
四、Smack 和 ASmack
1. Smack API是一個(gè)完整的實(shí)現(xiàn)了XMPP協(xié)議的開源API庫,支持文件、音頻、視頻等消息??梢允褂迷揂PI庫進(jìn)行二次開發(fā)。
2. 由于Smack官方?jīng)]有實(shí)現(xiàn)移動版本的API,但是第三方提供開源的基于Smack的Anadorid API:ASmack(Android build environment and patches for smack)。在Android上面可以利用該API可以進(jìn)行基于XMPP協(xié)議的即時(shí)消息應(yīng)用程序開發(fā)。