本文介紹基于java的即時通信解決方案openfire3.6.4+spark2.5.8的完整的安裝說明,并介紹了使用smack的java類庫如何與im用戶交互的例子,這樣使得業務系統的消息可以通過smack編程將消息發送給spark客戶端。spark2.5.8除了聊天之外還支持多人視頻,語音,文件傳輸,截圖,觀看遠程桌面,msn互聯互通等功能。因
本文圖片太多,需要看圖片的請下載資源或者訪問 http://code.google.com/p/openjweb/downloads/list ,找到java_im開頭的文件下載。 ?
?
?
?
?
?
?
Openfire+Spark 安裝手冊
?
?
?
?
?
?
?
王保政
QQ:29803446
?
關鍵字 : 快速開發平臺 openjweb 增刪改查 即時通信
?
2009-8-29
?
?
?
?
?
?
?
?
?
?
?
?
?
目 錄
?
?
?
?
第一章 ?????? Java 領域的 IM 解決方案
Java 領域的即時通信的解決方案可以考慮 openfire+spark+smack 。當然也有其他的選擇。
Openfire 是基于 Jabber 協議 (XMPP) 實現的即時通信服務器端版本,目前建議使用 3.6.4 版本,這個版本是當前最新的版本,而且網上可以找到下載的源代碼。
即時通信客戶端可使用 spark2.5.8, 這個版本是目前最新的 release 版本,經過測試發現上一版本在視頻支持 ,msn 網關支持上可能有問題,所以選擇 openfire3.6.4+spark2.5.8 是最合適的選擇。
Smack 是即時通信客戶端編程庫,目前我已測通通過 jsp 使用 smack 的 API 向 openfire 注冊用戶發送消息,并且可以通過監聽器獲得此用戶的應答消息。
通過 smack 向 msn 用戶和 QQ 用戶 ,gtalk 用戶發送消息應該也可以實現,關于向 gtalk 用戶發送消息的例子較多。這個留待以后研究。至少目前可以通過程序向 spark 發消息了。對于局域網內部應用足以解決系統與用戶交互的問題,甚至可以做自動應答機器人。
Spark 支持聊天,語音,視頻,會議,文件收發,截屏,連接 msn 等功能。
?
第二章 安裝 openfire3.6.4
2.1 配置機器的域名
使用 openfire 需要配置機器的域名。如果局域網內沒有安裝域服務器,則需要手工為機器配置域名,打開 C:/WINDOWS/system32/drivers/etc/hosts 文件,增加一新行:
127.0.0.1 ???????????????????????? bzwang.tzsoft.com ? (用戶根據自己的需要可配置稱別的名字,但最好符合帶 . 的域名格式)
其他機器使用域名訪問 openfire, 也需要在 C:/WINDOWS/system32/drivers/etc/hosts 中指定 bzwang.tzsoft.com 對應的 ip 地址,假設安裝 openfire 的主機 IP 為 192.168.1.10, 則 hosts 文件中應增加一新行 :
192.168.1.10 bzwang.tzsoft.com
通過這種方式指定主機域名,建議安裝 openfire 的機器配置靜態 ip 地址以免 ip 發生改變。
?
2.2 安裝 openfire
2.2.1 安裝
安裝程序為 openfire_3_6_4.exe, 運行后,語言選擇簡體中文,見下圖:
?
?
后續按照提示安裝,最后出現下面的界面:
?
?
?
這時先不要運行 openfire, 所以不要勾選上面頁面的復選框,然后點完成,如果勾選的話,在新出現的窗口中點“ stop ”停止 openfire 后續的運行,然會點 ”quit” 退出,因為下面要配置 openfire 使用的數據庫,需要手工將數據庫驅動放到 openfire 的某個目錄下,否則 openfire 不識別數據庫驅動的包名。
2.2.2 運行數據庫腳本
?
數據庫運行腳本在 C:/Program Files/Openfire/resources/database 目錄下,如果用戶安裝選擇的不是 C:/Program Files 目錄,可以到安裝 openfire 目錄下找到 database 目錄,打開此目錄后可看到有多種版本的數據庫腳本,假定我們現在要把 openfire 的數據庫安裝在 sqlserver2005 中,則使用 openfire_sqlserver.sql 腳本,假如已經裝好了 2005 數據庫,可在 Management Studio 中執行數據庫腳本,見下圖:
?
?
?
執行后,打開數據庫,可看到下面創建的數據庫表:
?
?
2.2.3 數據庫驅動 jar 包
如果使用 sqlserver2005, 則將 sqlserver2005 驅動 jar 包 sqljdbc.jar 復制到 C:/Program Files/Openfire/lib 下,使用 openjweb 快速開發平臺的用戶可直接從 D:/project/apache-tomcat-5.5.27/common/lib 找到此 jar 包復制過去,另外此目錄還有 mysql 的 mysql-connector-java-3.1.12-bin.jar 和 oracle 的 ojdbc14.jar ,如果用戶不選擇 sqlserver 則復制對應數據庫的驅動 jar 包。
2.2.4 openfire 初始化配置
從開始菜單中找到 openfire 并運行,下面是運行界面:
?
?
?
點 ”Launch Admin”, 出現下面的頁面,頁面連接為 http://127.0.0.1:9090/setup/index.jsp
?
?
?
語種選擇中文(簡體),點 ”Continue”: (下面的頁面如果出現英文,請刷新一下頁面或者重新點 Launch Admin )
?
這個頁面的 Domain 默認為機器名,請改為一開始設置的域名,例如 bzwang.tzsoft.com, 就是將圖中的 Domain 中的文字換成 bzwang.tzsoft.com 后,點 Continue( 繼續 ):
?
?
這個頁面中第一個選項,即標準數據庫連接,不要選擇嵌入的數據庫 ( Embedded Database, 嵌入的數據庫是 hsqldb 數據庫,生產環境不要選擇此選項 ), 然后點 ” 繼續 ”:
?
?
這個頁面是配置是否使用 LDAP, 我們現在不配置 LDAP, 所以選擇 Default 默認即可,點繼續 :
?
?
上圖是 sqlserver2005 的配置, jdbc 驅動類為 : com.microsoft.sqlserver.jdbc.SQLServerDriver
數據庫 URL 為:
jdbc:sqlserver://192.168.1.222:2324;DatabaseName=dms
數據庫名和用戶名及口令請根據實際環境配置。
?
配置完成后,點 ” 繼續 ”:
如果點繼續出現錯誤提示頁面,請檢查
(1) ?????? 數據庫表是否按前面的步驟已在數據庫中創建
(2) ?????? 是否已將對應的數據庫 jar 保復制到 openfire 的 lib 目錄
(3) ?????? 檢查數據庫連接參數,端口,數據庫名等屬性,可使用 dos 命令行檢查數據庫端口是否有效,例如 telnet 192.168.1.222 2324
下面是配置 LDAP 的頁面,選擇 ” 初始設置 ”( 默認選項 ) 即可。
?
?
點“繼續”:
下面是配置超級管理員的頁面:
?
?
?
輸入一個郵箱和口令,例如 123456
?
設置好后點“繼續”:
?
?
?
這個時候不要點“登錄到管理控制臺” , 登錄肯定失敗,需要切換到這個頁面:
?
?
點 ”stop” ,然后點“ start ” , 等重啟動成功后點 ”Launch Admin”, 進入登錄頁面:
?
?
?
使用 admin 用戶名和設置的口令 123456 登錄,下面是登錄成功的頁面,恭喜! sqlserver2005 上安裝 openfire 成功!
?
?
我們打開 ofUser 數據庫表可以看到 admin 用戶信息: ( 下面的口令不是用 md5 加密的 )
?
?
2.3 設置用戶
?
在登錄成功頁面點“用戶 / 組”標簽維護用戶信息,可在這里增加新的用戶,也可以建組,下面是新建的幾個組:
?
?
?
下面新建幾個測試用戶,分別是 abao/abao,zhangyu/zhangyu,suqi/suqi,liu/liu
?
?
說明:當安裝了 spark 客戶端后,用戶可直接在客戶端注冊帳號。
?
第三章 ?? 安裝 spark 客戶端
?
安裝程序為 spark_2_5_8.exe ,安裝過程全部默認即可。
下面是登錄界面:
?
?
登錄時可使用 openfire 中創建的帳號,也可以點 (A) 帳戶自己注冊新的帳號,服務器需設置為 openfire 的域名地址即上面安裝的 bzwang.tzsoft.com, 下面是登錄成功界面:
?
?
?
關于 spark 客戶端的具體功能就不介紹了,下面介紹 openfire 配置 msn 網關及 spark 如何連接 msn ,以及 red5 視頻的配置方式。
第四章 ?? 配置 msn 網關
4.1 服務端配置 msn 網關
?
將 gateway.jar 插件包 ( 可網上下載 ) 復制到 openfire 的 plugin 目錄下,如 :
C:/Program Files/Openfire/plugins ,如果 openfire 安裝到別的目錄請找到對應的目錄,把 gateway.jar 復制過去。停止 openfire, 重新啟動并登錄后,見下面的頁面,多出了一個 gateways 的標簽頁:
?
?
點 Gateways, 找到 MSN Messagers, 勾選,然后點“選項”,見下圖:
?
?
以上默認的配置不用修改,點“測試”,顯示:
?
?
點“測試連接”,顯示測試成功。(右側將顯示綠色背景的文字提示測試成功)
?
4.2 spark 客戶端設置 msn 帳號:
?
啟動 spark, 登錄后 ,spark 窗口的右上多出一個灰色的蝴蝶,見下圖:
?
?
點這個蝴蝶,然后選擇“輸入登入資訊”,顯示下面的窗口:
?
?
在這里輸入 msn 的用戶和口令,然后保存,稍后片刻, spark 將從 msn 上獲取用戶列表,最后顯示下面的 msn 好友列表:
?
?
?
這時可以選擇一個在線用戶聊天了, spark 還支持文件傳輸,截屏,語音,視頻等。
?
第五章 ?? Red5 視頻配置
5.1 部署 red5.war
將 red5.war 復制到 C:/Program Files/Openfire/plugins ,如果 openfire 是在運行狀態,一會會在這個目錄下自動部署 red5.war( 在此目錄下自動生成 red5 目錄 ) 。安裝成功后, openfire 的管理頁面會多出一個 red5 標簽,見下圖:
?
?
服務端不需要做任何改動。
5.2 spark 客戶端配置視頻插件
上一步驟部署了 red5 后,需要停止 openfire 并重新啟動,啟動完成后,訪問 http://bzwang.tzsoft.com:7070/red5 ,顯示一個 red5 的 html 首頁,下拉到頁面最下面,找到 spark plugin, 點 ”here”, 見下圖:
?
?
?
點 ” here ” 會下載 red5-plugin.jar, 直接保存在 C:/Program Files/Spark/plugins 目錄下,重新啟動 spark 。
在 spark 中右鍵點一個人,會出現幾個菜單:
?
?
?
其中 View Destop Screen 和 Publish Desktop Screen 是相關聯的 , 見下圖:
?
?
?
如果 A 用戶用 Publish Desktop Screen 發布了自己的桌面, B 用戶選擇 A 用戶,右鍵選擇上一個圖中的 View Desktop Screen, 則 B 用戶可看到 A 用戶的計算機桌面。在 http://bzwang.tzsoft.com:7070/red5 頁面上有一個功能和這個類似,見下圖:
?
?
?
To publish 是發布自己的桌面, To Viewer 是別人觀看自己發布的桌面,多人發布是什么效果沒有具體測試。可以自己發布然后觀看自己的桌面(效果有點像兩個鏡子對照,會出現層層窗口嵌套的現象),下面是自己發布自己的桌面并觀看自己的桌面的效果:
?
?
?
當選擇一個人,右鍵選擇 Add/Remove Video Roster 后,可進行 視頻聊天,可以加多個人進行視頻,每選擇一個熱人,然后點 Add/Remove Video Roster ,就可以將這個人加入到視頻中或者從視頻中移除,下面是視頻頁面(我沒裝攝像頭),可以看出一個頁面中可以顯示多人視頻,如果其他人也裝了 spark, 估計也能看到多人視頻的效果 ( 猜測,沒有測試 ) ,見下圖:
?
?
?
第六章 ?? 使用 smack 開發即時通信功能
?
可以使用 smack 開源產品開發與即時通信用戶交互的功能,這樣我們可以使用系統來模擬一個 openfire 的用戶來向其他用戶發送消息,因而可以使應用系統產生的業務消息實時傳遞給即時通信用戶,例如系統向某用戶發送“有新的請假單需要您審批”,如果用戶開啟了 spark 客戶端,則 spark 客戶端會實時接收此消息。
Smack 可從網上下載,目前最新版本為 smack_3_1_0.zip ,將此文件里四個 smack 開頭的 jar 包放到自己的 WEB 應用的 WEB-INF/lib 目錄,使用下面的 jsp 文件進行測試 :
下面是測試向 spark 用戶 suqi 發送消息的頁面代碼:
?
<%@ page contentType="text/html;charset=UTF-8"%>
?
<%@ page import="org.jivesoftware.smack.*"%>
<%@ page import="org.jivesoftware.smack.packet.*"%>
?
<%
?
?? // 以下可以通過程序向 spark 帳號發信息,但沒有測通想 msn 帳號發信息
?? XMPPConnection connection = new XMPPConnection("bzwang.tzsoft.com"); //openfire 服務器的主機域名
?? // ConnectionConfiguration connectionConfig = new ConnectionConfiguration( "messenger.hotmail.com",1863,"messenger.hotmail.com");
?? // ? XMPPConnection connection = new XMPPConnection(connectionConfig);
?? connection.connect();// 先連接服務器
?? try
?? {
?????? connection.login("abao", "abao");// 使用 openfire 的注冊用戶登錄 openfire 服務器
??? ?? System.out.println(" 登錄成功 !");
??? ?? //createChat 的第一個參數一定要帶域名 (suqi@bzwang.tzsoft.com) ,否則會話失敗
??? ?? Chat chat = connection.getChatManager().createChat("suqi@bzwang.tzsoft.com", new MessageListener()
??? ?? //Chat chat = connection.getChatManager().createChat("baozhengw9999%hotmail.com@msn.bzwang.cmissoft.com", new MessageListener()
??? ?? {
??? ?????? public void processMessage(Chat chat, Message message)
?????? ?? {
?????? ?????? // 如果不用 connection.disconnect() 斷開連接,這里可以監聽回復信息
?????????? ?? System.out.println("Received message: " + message.getBody());
?????? ??? }
??? ??? }
?????? );
??????
?????? System.out.println(" 發送消息 ....");
??????
?????? chat.sendMessage(" 請問你收到我的消息了嗎 ?");//
?????? /* Message message = new Message("baozhengw9999%hotmail.com@msn.bzwang.cmissoft.com");
?????? ?? message.setBody(" 你好!我是個聊天機器人! ");
?????? ?? connection.sendPacket(message);
??? ??? */
??? ??? System.out.println(" 發送完畢 ...");
?????? connection.disconnect();
?????? } catch (Exception ex) {
?????????? System.out.println("login error");
?????? }
?
%>
?
?
發送成功后,如果 suqi 用戶打開了 spark, 則 spark 會閃爍提示有新消息,打開 spark, 聊天窗口顯示系統用 abao 用戶發送的消息,見下圖:
?
?
?
這樣實現了業務系統和即時通信的無縫整合,以后應該還可以實現通過 smack 編程使內網的 openfire 注冊用戶向自己的 msn 好友或 QQ 好友發送消息以及接收消息。
?
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
