一、 概述
- Openfire最主要的功能是实现XMPP服务器,简单来说,openfire为我们提供一个固定的地址,我们只需要向openfire服务器发送标准的XMPP信息(即XML文件流),那么openfire服务器应当给予我们回应,这里的openfire服务器也可以看做一个容器,我们在聊天时,需要在这个服务器上注册一个会话,在会话存在的时间,我们可以实现即时聊天的一些常用功能,比如建立自己的组,添加好友,聊天,以及传送文件等等,同时,openfire服务器也需要实现自己的管理界面,这样openfire服务器也扮演一个web容器的角色
- Openfire是开源的实时协作服务器(RTC),它是基于公开协议XMPP(也成为Jabber)消息的。
- 使用它轻易的构建高效率的即时通信服务器。
- Openfire的核心功能可以概括为:连接管理、消息解析、消息路由、消息发送。
- Openfire具有跨平台的能力,Openfire与客户端采用的是C/S架构,一个服务器要负责为连接在其上的客户端提供服务。
- Openfire客户端有spark, pidgin, Miranda IM, iChat等,用户如果自己开发客户端,可以采用遵循GPL的开源Client端API--Smack。
- Openfire服务器端支持插件开发,如果开发者需要添加新的服务,可以开发出自己的插件后,安装至服务器,就可以提供服务,如查找联系人服务就是以插件的形式提供的。
二、 体系架构
三、 功能模块
- Pubsub:Publish/Subscribe,这使得xmpp实体能够在pubsub服务上创建nodes(topics),并且发布信息。一个事件通知将广播到所有订阅了这个节点的实体上。
- Pep:(Personal Eventing Protocol)使用XMPP publish-subscribe协议广播状态改变事件、及时消息和出席帐户到其他用户。
- Stun:为p2p会话提供地址发现服务,如:媒体传输和UDP包的收发。
- Router:内部的路由,把相应的包路由给相应的处理器。
- Muc:(Multi-User Chat)用户可以交换文本信息在room或者channel上下文中,版主或者管理员有权踢除用户和禁止用户。
- 所有Module都需要实现Module接口,该接口中定义了模块生命周期中需要调用的方法
四、 数据模型
- 数据库表设计:详见:
- Openfire的数据库处理采用直接调用JDBC 的方式。核心类为org.jivesoftware.database.DbConnectionManager。数据库的处理与业务处理耦合,没有划分出专门的业务逻辑层。
- 3. ConnectionProvider,此类为数据库提供者接口,如需连接mysql、hsqldb等数据库,需首先实现些接口,通常直接调用XXManager中的实例方法,XXManager中又调用的是对应的接口XXProvider的方法,实际操作在该接口的实现类中实现。实现类是动态绑定的(默认的实现类通常命名规则为DefaultXXProvider),在运行时根据ofproperty表中对应配置项值选
- org.jivesoftware.database.DbConnectionManager,连接管理类
- org.jivesoftware.util