本 文介绍基于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 好友发送消息以及接收消息。