漫步云端

移动开发(Android、iPhone、Windows Mobile) | JAVA | C | C++ | .net | Objective C | 微软企业开发技术 | 嵌入式系统设计与开发
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

主要包含4个章节:

1. Java 领域的即时通信的解决方案

2. 搭建 Openfire 服务器

3. 使用客户端测试我们搭建的 Openfire 服务器

4. Smack 和 ASmack

 

一、Java领域的即时通信的解决方案

 

      Java领域的即时通信的解决方案可以考虑openfire+spark+smack。

      1. Openfire是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前最新的版本为3.6.4,网上可以找到下载的源代码。

      OpenFire


      2. 即时通信客户端可使用spark2.5.8,这个版本是目前最新的release版本,经过测试发现上一版本在视频支持。

      Spark


      3. Smack是即时通信客户端编程库,可以使用smack的API向openfire注册用户发送消息,并且可以通过监听器获得此用户的应答消息,甚至可以做自动应答机器人,后门我们会用到该API。

      Smack

     

二、搭建Openfire服务器

 

2.1 准备工作:配置主机的域名

      使用openfire需要配置机器的域名。打开C:\WINDOWS\system32\drivers\etc\hosts文件,增加一新行:127.0.0.1   im.comit.com.cn
      其他机器使用域名访问openfire,也需要在C:\WINDOWS\system32\drivers\etc\hosts中指定im.comit.com.cn对应的ip地址,例如我的局域网IP为192.168.0.177,则hosts文件中应增加一新行:
192.168.0.177 im.comit.com.cn

      DNS2

     

      可以ping一下刚才的域名im.comit.com.cn,验证是否配置正确:

      DNS3

 

2.2 准备工作:创建openfire运行所需的数据库   

      下载openfire:openfire需要java运行时,由于我的机器已经有了java开发环境,所以下载了免安装版的zip压缩包。

      Openfire 下载

     

      下载完解压缩,我的目录是:D:\Technology\XMPP\openfire。

      需要创建openfire运行所需的数据库:我电脑已经安装了的是Sqlserver 2005。打开D:\Technology\XMPP\openfire\resources\database目录:

      db

      打开Microsoft SQL Server Management Studio创建数据库Openfire并运行openfire_sqlserver.sql的脚本:

      table

      这里截取了一部分表。

      由于openfire安装包并没有内置SqlServer的jdbc驱动,所以需要从网上下载sqljdbc.jar并拷贝至以下目录:D:\Technology\XMPP\openfire\lib。

     

2.3 开始安装openfire

      表创建完毕之后、运行bin目录下的openfire.exe。

      run

      选择Launch Admin打开管理员界面:

      step_1

      选择简体中文,Continue下一步:

      step_2_2

      输入2.1中配置的域名:im.comit.com.cn,端口默认。继续:

      step_3

      这一步选择标准数据库,继续:

      step_4

      选择SqlServer

      驱动程序类输入:com.microsoft.sqlserver.jdbc.SQLServerDriver

      数据库URL:jdbc:sqlserver://127.0.0.1;DatabaseName=Openfire

      出入用户名sa,密码xxxxxx,其他默认。点击继续:

      step_5

      选择“初始设置”,继续:

      step_6

      这里顺便输入游戏号以及密码,说明:这一步是创建admin帐号,一定要记住密码。继续:

      step_7

      系统提示openfire已经安装完成了。

      在Microsoft SQL Server Management Studio ,打开表ofUser表,会看到刚才创建的admin帐号:

      step_11

      这个时候不要点“登录到管理控制台”,登录肯定失败,需要切换到这个页面:

      step_8

      点”stop”,然后点“start”,等重启动成功后点”Launch Admin”,进入登录页面:

      step_9

      输入admin和刚才创建的密码,登录:

      step_10

      从管理员界面,我们可以查看服务器名称:im.comit.com.cn ;并且可以管理用户组和用户:

     step_13

      这里,通过管理界面插入一个test用户(那么该用户的jid为:teat@im.comit.com.cn,有关jid的定义在第二篇文章介绍XMPP协议时有介绍)。

      到目前为止,openfire服务器基本搭建成功。

 

三、使用客户端测试我们搭建的openfire服务器

 

      主要测试用例包括:连接openfire服务器、在客户端注册用户、在不同的基于XMPP协议的客户端进行添加好友请求以及发送即时消息。

      1. Spark 客户端:与openfire同一个开源组织的基于XMPP协议的客户端

      Spark

      2. SparkWeb:基于Web的XMPP客户端

      SparkWeb

      3. 如意通(Rooyee Message,国内公司开发的开源的基于XMPP、支持文件、音频、视频聊天、功能比较强悍的一款软件,下载地址:http://rooyee.biz/a/xiazaizhongxin/ruanjianxiazai/index.html

      rooyee

     

      开始进行测试:

 

      step_15

            step_17    

      安装openfire服务器时,我们创建了帐号test,现在我们使用Spark客户端申请一个帐号test2,注意服务器输入im.comit.com.cn。创建成功之后登录。

      在Microsoft SQL Server Management Studio ,打开表ofUser表,会看到刚才创建的test2帐号:

      step_18

      Rooyee Message的登录设置与Spark类似,我们使用test帐号登录Rooyee Message。

      step_19

     

      2款软件都登录成功之后。使用Spark登录的test2 来向Rooyee Message登录的test 发送联系人添加请求。

      step_20

      桌面右下角Rooyee Message会弹出test2的请求对话框

      step_23

      同意请求之后,在联系人列表就可以看到双方在线的情况以及对方的注册信息。

      step_25

 

      下面测试2款异构的客户端之间的通信(Spark是Java客户端,Rooyee Message是用Delphi开发的客户端,但两者都是基于XMPP协议)。

      step_26

      Spark客户端的消息。

      step_27

      Rooyee Message的消息框。

      同时打开Openfire的后台,我们可以看到两者的的回话信息:

      step_28

      到现在服务器和客户端都已经准备测试通过了。

      从中我们可以发觉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协议的即时消息应用程序开发。