Java領域的IM解決方案
Java領域的即時通信的解決方案可以考慮openfire+spark+smack。
Openfire是基於Jabber協議(XMPP)實現的即時通信服務器端,最新版本是3.8.1
可以到http://www.igniterealtime.org/downloads/index.jsp下載(分為windows和linux版本)
可以到http://www.igniterealtime.org/downloads/source.jsp下載源碼,方便二次開發插件。
Spark是即時通信客戶端。同樣在上述地址下載,最新版本是2.6.3
Spark支持聊天,會議,文件收發,截屏,連接msn等功能。
如果是想支持 語音,視頻,則必須
不能安裝 Online版本,必須安裝Spark完整版本。
下載Openfire3.6.4版本及red5插件
Smack是即時通信客戶端編程庫,目前我已測通jsp使用smack的API向openfire注冊用戶發送消息,並且可以通過監聽器獲得此用戶的應答消息。
通過Smack向msn用戶和QQ用戶,gtalk用戶發送消息應該也可以實現,關於向gtalk用戶發送消息的例子較多。
第二章 安裝openfire
此處以windows版本(ZIP)版本進行演示。
將ZIP版本解壓后,將”openfire”文件夾拷貝到“D:\xtomchat”目錄。
然后打開“D:\XtomChat\openfire\bin\openfire.exe”,啟動后,點擊“langch admin”,根據提示進行安裝。
安裝前,首先在本地MYSQL中新建xtom_chat數據庫(utf8編碼)。
然后安裝過程中手動選擇MYSQL,數據庫URL串填寫:
jdbc:mysql://192.168.1.146:3306/xtom_chat?rewriteBatchedStatements=true
安裝過程中域名默認為本地計算機名稱,此值不好用,可更改為IP地址或真實公網域名。
如果無法登錄管理后台:則在ofuser數據表中,更換encryptedPassword字段的值為“36361c6a3f353bf245021f896fb138fe02c0b7612e9fcd1f”,則
用戶名為admin,密碼為”123456”。
安裝spark客戶端
安裝程序為spark_2_5_8.exe,安裝過程全部默認即可。
下面是登錄界面:
登錄時可使用openfire中創建的帳號,也可以點(A)帳戶注冊新帳號,服務器需設置為openfire的域名地址即上面安裝的192.168.1.116,下面是登錄成功界面:
關於spark客戶端的具體功能就不介紹了,下面介紹openfire配置msn網關及spark如何連接msn,以及red5視頻的配置方式。
======================WHB以下章節尚未進行測試=======================
配置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視頻配置
redfire插件下載地址: http://code.google.com/p/redfire/downloads/list 搜索框里輸入red5,或者直接打開: http://code.google.com/p/redfire/downloads/detail?name=red5.war&can=2&q= |
|
解壓后將red5.war放到openfire的plugins下; 重啟openfire 通過訪問:http://127.0.0.1:9090/red5
下載redfire的spark插件 |
|
點”here”會下載red5-plugin.jar,直接保存在Spark\plugins目錄下,重新啟動spark。
將red5.war復制到Openfire\plugins,如果openfire是在運行狀態,一會會在這個目錄下自動部署red5.war(在此目錄下自動生成red5目錄)。安裝成功后,openfire的管理頁面會多出一個red5標簽,服務端不需要做任何改動。
上一步驟部署了red5后,需要停止openfire並重新啟動,啟動完成后,訪問http://127.0.0.1:7070/red5/ ,顯示一個red5的html首頁,下拉到頁面最下面,找到spark plugin
點”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://wpy.com:7070/red5頁面上有一個功能和這個類似,To publish是發布自己的桌面,To Viewer是別人觀看自己發布的桌面,多人發布是什么效果沒有具體測試。可以自己發布然后觀看自己的桌面(效果有點像兩個鏡子對照,會出現層層窗口嵌套的現象),當選擇一個人,右鍵選擇Add/Remove Video Roster后,可進行 視頻聊天,可以加多個人進行視頻,每選擇一個熱人,然后點Add/Remove Video Roster,就可以將這個人加入到視頻中或者從視頻中移除,下面是視頻頁面(我沒裝攝像頭),可以看出一個頁面中可以顯示多人視頻,如果其他人也裝了spark,估計也能看到多人視頻的效果(猜測,沒有測試),
搞了好幾天才把這東西搞明白。今天終於搞定了。其中的關鍵就是SparkWeb依賴於Red5。但是在http://www.igniterealtime.org/downloads/index.jsp的下載頁面又找不到Red5的下載。包括openfire的插件下載頁面http://www.igniterealtime.org/projects/openfire/plugins.jsp上也找不到Red5的下載。估計需要到red5的官網上下載,但是我沒有去下載。還是在igniterealtime的網站上找到了for openfire的red5插件。下載地址http://www.igniterealtime.org/projects/openfire/plugins-beta.jsp。下載那個red5.war。之后的事情就簡單了。
將red5.war放到openfire的plugins目錄下,然后啟動openfire,它會自動解壓red5.war。解壓完成后能看到red5/sparkweb目錄,以及一些其他的目錄。然后還需要配置才能使用。進入openfire的管理控制台,即啟動openfire后點擊Launch Admin打開頁面,輸入admin/admin進入。打開“服務器設置”——〉“HTTP綁定”,將兩個選項分別啟用及enabled。然后注意HTTP綁定的端口,默認是7070。保存設置后重起openfire就OK了。通過瀏覽器打開http://[openfire的IP]:7070/red5/sparkweb/就看到了登陸界面了。輸入openfire的用戶的用戶名及密碼就等到到openfire了。
安裝完red5插件后,openfire的管理控制台中會增加一個red5的配置頁,保持默認,什么都不用改。
另外,在red5/sparkweb下的文件,看起來非常熟悉,就是從igniterealtime網上下載的Sparkweb的結構。所以可以下載最新的Sparkweb替換。
5.2 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好友發送消息以及接收消息。
SPARK二次開發:
1.准備工作:
到官網上下載Openfire 3.6.4,並通過svn下載openfire、Spark和SparkWeb的源代碼
官網地址如下:
http://www.igniterealtime.org/downloads/index.jsp
注意官網上最新的Spark版本是2.5.8,其jdk環境最好使用1.6的版本。
2.環境搭建——spark源碼安裝配置
雙擊openfire_3_6_4.exe進行openfire的安裝,安裝過程很簡單,不介紹了。
本例的開發環境是基於Eclipse的。
1)選擇File——New——Project——Java Project。
輸入項目工程名spark
Contents中選擇 "Create project from existiing source",然后把spark文件所在的文件夾加進去.
點擊Finish。
2)生成Spark:
點擊Window::Show View::Ant
右擊Ant面板,選擇Add Buildfiles
展開spark::build文件夾,選擇build.xml,點擊"OK"
在Ant面板,展開Spark,雙擊"release",等一段時間,會提示"Build Successful"。
3)運行Spark:
點擊Run::Open Debug Dialog...,出現"Run"窗口
選擇"Java Application",右鍵點擊"New"按鈕.
在"Main"標簽頁,將New_configuration換成Spark.
點擊Project::Browse按鈕,選擇Spark,再點OK.
點擊Main class::Search按鈕,選擇main所在的類org.jivesoftware.launcher.Startup再點擊OK
建議勾選Stop in main.
點擊Classpath標簽頁,選擇User Entries ,使得Advanced..按鈕變的可用.點擊Advanced按鈕.在彈出來的Advanced Options窗口,選擇Add Folders,再點OK,在Folder Selection窗口選擇spark::src::resources 文件夾,點擊OK
選擇Common標簽頁,勾選Debug,Run前面的框
點擊Apply,再點擊Close
4)在run下選擇spark,運行成功!
參考文檔:http://www.igniterealtime.org/community/docs/DOC-1040
http://wanghaibin0921.blog.163.com/blog/static/36068840201351785643146/