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的第一个参数一定要带域名([email protected]),否则会话失败
Chat chat = connection.getChatManager().createChat("[email protected]", new MessageListener()
//Chat chat = connection.getChatManager().createChat("baozhengw9999%[email protected]", 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%[email protected]");
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/