主要包含4个章节:
1. Java 领域的即时通信的解决方案
2. 搭建 Openfire 服务器
3. 使用客户端测试我们搭建的 Openfire 服务器
4. Smack 和 ASmack
一、Java领域的即时通信的解决方案
Java领域的即时通信的解决方案可以考虑openfire+spark+smack。
1. Openfire是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前最新的版本为3.6.4,网上可以找到下载的源代码。
2. 即时通信客户端可使用spark2.5.8,这个版本是目前最新的release版本,经过测试发现上一版本在视频支持。
3. Smack是即时通信客户端编程库,可以使用smack的API向openfire注册用户发送消息,并且可以通过监听器获得此用户的应答消息,甚至可以做自动应答机器人,后门我们会用到该API。
二、搭建Openfire服务器
2.1 准备工作:配置主机的域名
使用openfire需要配置机器的域名。打开C:WINDOWSsystem32driversetchosts文件,增加一新行:127.0.0.1 im.comit.com.cn
其他机器使用域名访问openfire,也需要在C:WINDOWSsystem32driversetchosts中指定
im.comit.com.cn对应的ip地址,例如我的局域网IP为192.168.0.177,则hosts文件中应增加一新行:
192.168.0.177 im.comit.com.cn
可以ping一下刚才的域名im.comit.com.cn,验证是否配置正确:
2.2 准备工作:创建openfire运行所需的数据库
下载openfire:openfire需要java运行时,由于我的机器已经有了java开发环境,所以下载了免安装版的zip压缩包。
下载完解压缩,我的目录是:D:TechnologyXMPPopenfire。
需要创建openfire运行所需的数据库:我电脑已经安装了的是Sqlserver 2005。打开D:TechnologyXMPPopenfire esourcesdatabase目录:
打开Microsoft SQL Server Management Studio创建数据库Openfire并运行openfire_sqlserver.sql的脚本:
这里截取了一部分表。
由于openfire安装包并没有内置SqlServer的jdbc驱动,所以需要从网上下载sqljdbc.jar并拷贝至以下目录:D:TechnologyXMPPopenfirelib。
2.3 开始安装openfire
表创建完毕之后、运行bin目录下的openfire.exe。
选择Launch Admin打开管理员界面:
选择简体中文,Continue下一步:
输入2.1中配置的域名:im.comit.com.cn,端口默认。继续:
这一步选择标准数据库,继续:
选择SqlServer
驱动程序类输入:com.microsoft.sqlserver.jdbc.SQLServerDriver
数据库URL:jdbc:sqlserver://127.0.0.1;DatabaseName=Openfire
出入用户名sa,密码xxxxxx,其他默认。点击继续:
选择“初始设置”,继续:
这里顺便输入游戏号以及密码,说明:这一步是创建admin帐号,一定要记住密码。继续:
系统提示openfire已经安装完成了。
在Microsoft SQL Server Management Studio ,打开表ofUser表,会看到刚才创建的admin帐号:
这个时候不要点“登录到管理控制台”,登录肯定失败,需要切换到这个页面:
点”stop”,然后点“start”,等重启动成功后点”Launch Admin”,进入登录页面:
输入admin和刚才创建的密码,登录:
从管理员界面,我们可以查看服务器名称:im.comit.com.cn ;并且可以管理用户组和用户:
这里,通过管理界面插入一个test用户(那么该用户的jid为:teat@im.comit.com.cn,有关jid的定义在第二篇文章介绍XMPP协议时有介绍)。
到目前为止,openfire服务器基本搭建成功。
三、使用客户端测试我们搭建的openfire服务器
主要测试用例包括:连接openfire服务器、在客户端注册用户、在不同的基于XMPP协议的客户端进行添加好友请求以及发送即时消息。
1. Spark 客户端:与openfire同一个开源组织的基于XMPP协议的客户端
2. SparkWeb:基于Web的XMPP客户端
3. 如意通(Rooyee Message,国内公司开发的开源的基于XMPP、支持文件、音频、视频聊天、功能比较强悍的一款软件,下载地址:http://rooyee.biz/a/xiazaizhongxin/ruanjianxiazai/index.html)
开始进行测试:
安装openfire服务器时,我们创建了帐号test,现在我们使用Spark客户端申请一个帐号test2,注意服务器输入im.comit.com.cn。创建成功之后登录。
在Microsoft SQL Server Management Studio ,打开表ofUser表,会看到刚才创建的test2帐号:
Rooyee Message的登录设置与Spark类似,我们使用test帐号登录Rooyee Message。
2款软件都登录成功之后。使用Spark登录的test2 来向Rooyee Message登录的test 发送联系人添加请求。
桌面右下角Rooyee Message会弹出test2的请求对话框
同意请求之后,在联系人列表就可以看到双方在线的情况以及对方的注册信息。
下面测试2款异构的客户端之间的通信(Spark是Java客户端,Rooyee Message是用Delphi开发的客户端,但两者都是基于XMPP协议)。
Spark客户端的消息。
Rooyee Message的消息框。
同时打开Openfire的后台,我们可以看到两者的的回话信息:
到现在服务器和客户端都已经准备测试通过了。
从中我们可以发觉XMPP协议的开放性。
四、Smack 和 ASmack
1. Smack API是一个完整的实现了XMPP协议的开源API库,支持文件、音频、视频等消息。可以使用该API库进行二次开发。
2. 由于Smack官方没有实现移动版本的API,但是第三方提供开源的基于Smack的Anadorid API:ASmack(Android build environment and patches for smack)。在Android上面可以利用该API可以进行基于XMPP协议的即时消息应用程序开发。