企业级即时通信系统的开源解决方案 - 图文(6)

2020-04-17 06:19

客户端:

服务器:

服务器:Neither, fair saint, if either thee dislike. 服务器: 客户端: 服务器:

从以文档的观点来看,客户端或服务器发送的所有XML文本连缀在一起,从构成了一个完整的XML文档。其中的stream标签就是所谓的XML Stream。在中间的那些...这样的XML元素就是所谓的XML Stanza(XML节)。XMPP核心协议通信的基本模式就是先建立一个stream,然后协商一堆安全之类的东西,中间通信过程就是客户端发送XML Stanza。服务器根据客户端发送的信息以及程序的逻辑,发送XML Stanza给客户端。但是这个过程并不是一问一答的,任何时候都有可能从一个方发信给另外一方。通信的最后阶段是关闭流,关闭TCP/IP连接[22]。 6.2.3 XMPP协议应用程序编程接口(简称:API)

在使用XMPP(Jabber)协议的时候,一般不需要从底层重新实现协议细节,为了 “不重复制造轮子”,而选用Java编写的Smack API。

Smack是一个开源,易于使用的XMPP(jabber)客户端类库。它具有如下优点[23]:

(1)Smack是一个简单的,功能强大的类库。给用户发送信息只需三行代码便可完成:

XMPPConnection connection = new XMPPConnection(”jabber.org“); connection.login(”mtucker”, “password”);

connection.createChat(”jsmith@jivesoftware.com“).sendMessage(”Howdy!”);

(2)不会强迫你向其他类库那样,在信息包层面进行编码。它提供了更加智能化的类比如Chat和Groups,能使你的工作更富效率。

(3)不需要你熟悉XMPP XML格式,甚至是XML格式。 (4)易于实现机--机对话。

17

(5)Apace License下的开源软件。你可以把它用于你的商业或非商业应用程序。

Smack API封装了底层通信细节,并提供相对应的应用接口。在实际应用时,开发者只需要调用或实现相应接口即可。 6.3 服务端的设计 6.3.1 Openfire简介

图9 openfire数据库部分Tables

图10 openfire数据库配置信息

由于Openfire在同类产品中已经很成熟,所以我们选用它作为服务端实现。

18

首先来关注一下,官方网站(http://www.igniterealtime.org)对它的定位[22]。

Openfire is a real time collaboration (RTC) server licensed under the Open Source GPL. It uses the only widely adopted open protocol for instant messaging, XMPP (also called Jabber). Openfire is incredibly easy to setup and administer, but offers rock-solid security and performance.

由此可见,Openfire作为一款遵循GPL协议,使用XMPP协议通信的即时通信服务端,在功能上并不逊于同类的商业软件。 6.3.2 Openfire的整合设计

服务端主要由服务器组件和数据库组成。而Openfire已经内置了对数据库实体关系的设计以及数据库的相关配置。如用户表、用户信息表、用户电子卡片表、好友关系表??,如图9和图10。

与原有的客户数据断连是使用Openfire设计的数据库的一个缺点[23]。如果想使用现有系统的用户/组(部门),而不想使用openfire再去管理一套用户/组,那利用openfire对JDBC Provider的支持可以非常方便的整合现有系统用户。具体操作如下:

进入openfire管理控制台—服务器-服务管理器-系统属性可以发现如下配置:

provider.auth.className

org.jivesoftware.openfire.auth.DefaultAuthProvider

*用户验证

provider.group.className

org.jivesoftware.openfire.group.DefaultGroupProvider

*获取组相关数据 provider.user.className

org.jivesoftware.openfire.user.DefaultUserProvider

*获取用户相关数据

这些Provider是openfire默认自己管理用户组。但同时openfire还提供了支持JDBC相关的Provider,可以从其它的数据源获取用户/组数据。将上面

19

三个属性分别修改为:

org.jivesoftware.openfire.auth.JDBCAuthProvider org.jivesoftware.openfire.group.JDBCGroupProvider org.jivesoftware.openfire.user.JDBCUserProvider

然后,需要配置一下数据源,添加如下属性

jdbcProvider.driver *数据源驱动

jdbcProvider.connectionString *连接字符串

对每一个JDBC Provider需要配置相关的SQL语句和属性(在系统属性里添加项目)。

JDBCAuthProvider

jdbcAuthProvider.passwordSQL *获取用户密码的SQL *输入参数:登录名 *输入列:密码

*例:SELECT pwd FROM user WHERE name=? jdbcAuthProvider.passwordType

*密码类型可以是:plain(文本),md5,sha1

*如果你的密码加密不为以上三种,就需要自己提供一个AuthProvider JDBCGroupProvider

jdbcGroupProvider.allGroupsSQL *获取所有组的SQL *输入参数:无

20

*输出列:组的KEY

*例:SELECT sn FROM department

jdbcGroupProvider.descriptionSQL *获取组的名称(描述) *输入参数:组记录的KEY *输出列:组的名称(描述)

*例:SELECT name FROM department where sn=?

jdbcGroupProvider.groupCountSQL *获取组的数量 *输入参数:组的KEY *输出列:组的数量

*例:SELECT count(sn) FROM department

jdbcGroupProvider.loadAdminsSQL *获取组的管理员 *输入参数:组记录的KEY *输出列:组管理员的KEY

*例:SELECT admin FROM department where sn=?

jdbcGroupProvider.loadMembersSQL *获取组的成员 *输入参数:组的KEY

*输出列:组成员的KEY(集合)

*例:SELECT usersn FROM department_user where departmentsn=?

jdbcGroupProvider.userGroupsSQL *获取成员的组

21


企业级即时通信系统的开源解决方案 - 图文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高三生物一轮复习资料2

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: