ImageVerifierCode 换一换
格式:DOC , 页数:87 ,大小:1,004.50KB ,
资源ID:2081464      下载积分:17 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-2081464.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(openfire处理消息流程及其openfire详细信息~.doc)为本站会员(小**)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

openfire处理消息流程及其openfire详细信息~.doc

1、#*XMPP 介绍Extensible Messaging and Presence Protocol,简单的来讲,它就是一个发送接收处理消息的协议,但是这个协议发送的消息,既不是二进制的东东也不是字符串,而是 XML。正是因为使用了 XML 作为消息传递的中介, Extensible 才谈的上,不是么? IMInstant Messenger,及时通信软件,就是大家使用的 QQ、MSN Messenger 和 Gtalk 等等。其中 Gtalk 就是基于 XMPP 协议的一个实现,其他的则不是。当前 IM 几乎作为每个上网者必然使用的工具,在国外的大型企业中有一些企业级的 IM 应用,但是其

2、商业价值还没完全发挥出来。设想既然 XMPP 协议是一个公开的协议,那么每个企业都可以利用它来开发适合本身企业工作,提高自身生产效率的 IM;甚至,你还可以在网络游戏中集成这种通信软件,不但让你可以边游戏边聊天,也可以开发出适合游戏本身的 IM 应用,比如说一些游戏关键场景提醒功能,团队语音交流等等都可以基于 IM 来实现。Spark Smack 和 Openfire开源界总是有许多有趣的东东,这三个合起来就是一个完整的 XMPP IM 实现。包括服务器端Openfire ,客户端 Spark,XMPP 传输协议的实现Smack(记住,XMPP 是一个协议,协议是需要实现的, Smack 起到

3、的就是这样的一个作用) 。三者都是基于 Java 语言的实现。Spark 提供了客户端一个基本的实现,并提出了一个很好的插件架构,这对于开发者来说不能不说是一个福音。我强烈建议基于插件方式来实现你新增加的功能,而不是去改它的源代码,这样有利于你项目架构,把原始项目的影响降到最低。Openfire 是基于 XMPP 协议的 IM 的服务器端的一个实现,虽然当两个用户连接后,可以通过点对点的方式来发送消息,但是用户还是需要连接到服务器来获取一些连接信息和通信信息的,所以服务器端是必须要实现的。Openfire 也提供了一些基本功能,但真的很基本的!庆幸的是,它也提供插件的扩展,像 Spark 一样

4、,同样强烈建议使用插件扩展的方式来增加新的功能,而不是修改人家的源代码。Smack 是一个 XMPP 协议的 Java 实现,提供一套可扩展的 API,不过有些时候,你还是不得不使用自己定制发送的 XML 文件内容的方式来实现自己的功能下图展示了三者之间的关系:#*从图上可以了解到,client 端和 server 端都可以通过插件的方式来进行扩展,smack 是二者传递数据的媒介。Apache MINAOpenfire 的通信处理基于 Apache MINA 框架实现。Apache MINA 是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可靠性的网络应用程序。它提供了一个通过Jav

5、a NIO 在不同的传输例如 TCP/IP 和 UDP/IP 上抽象的事件驱动的异步 API。 Apache MINA 也称为: NIO 框架库 客户端服务器框架库 一个网络套接字库 MINA 虽然简单但是仍然提供了全功能的网络应用程序框架: 为不同的传输类型提供了统一的 API: 通过 Java NIO 提供 TCP/IP 和 UDP/IP 支持 通过 RXTX 提供串口通讯 (RS232) In-VM 管道通讯 你能实现你自己的 API! 过滤器作为一个扩展特性; 类似 Servlet 过滤器 低级和高级的 API: 低级: 使用字节缓存 (ByteBuffers) 高级: 使用用户定义的

6、消息对象 (objects)和编码(codecs) 高度定制化线程模型: 单线程 一个线程池 一个以上的线程池(也就是 SEDA) #* 使用 Java 5 SSL 引擎提供沙盒(Out-of-the-box) SSL TLS StartTLS 支持 超载保护和传输流量控制 利用模拟对象进行单元测试 JMX 管理能力 通过 StreamIoHandler 提供基于流的 I/O 支持 和知名的容器(例如 PicoContainer、Spring)集成 从 Netty 平滑的迁移到 MINA, Netty 是 MINA 的前辈。命名规则Openfire 中常见的类名后缀命名包括Starter、Pl

7、ugin、Listener、Dispatcher、Handler、Manager、Provider,通常情况下,这些命名类包括如下意义:XXStarter 系统启动类,如 org.jivesoftware.openfire.starter.ServerStarter,调用其 start()方法可启动系统应用。XXListener业务的最终处理类。XXDispatcher调度类,其中有很多关键方法,如 addListener(),以组合的方式,为类内定义的静态 Set实例添加 XXListener 对象。以便调用dispatchEvent(String property, EventType e

8、ventType, Map params)方法遍历处理 Set 集中的 XXListener 对象(通过调用XXListener 对象的各实际方法完成实际业务)。XXPlugin实现 Plugin 接口的插件类,需实现 initializePlugin(PluginManager manager, File pluginDirectory)方法和 destroyPlugin()方法。在其初始化方法中调用 Dispatcher 实现类的 addListener()方法如PropertyEventDispatcher.addListener(this)。#*XXProvider实现面向接口编程方式

9、的接口类,通过反射机制创建具体实现类的对象,反射类名配置在 ofproperty 表对应的记录 propvalue 属性中。若没有相关配置,则调用默认实现类,默认实现类类名命名规则为 DefaultXXProvider。XXHandler实际处理类,以 ConnectionHandler 为例,在org.jivesoftware.openfire.spi. ConnectionManagerImpl 类的startClientSSLListeners(String localIPAddress)方法中,有这样一段代码:sslSocketAcceptor.bind(new InetSocketA

10、ddress(bindInterface, port), new ClientConnectionHandler(serverName);其中bind方法的第二个参数是新创建的一个ClientConnectionHandler的实例,而它就是ConnectionHandler的一个子类。系统配置项Openfire 的系统配置项采用文件结合数据库表的方式配置,也有部分默认配置项通过 Java 硬编码方式配置(如 org.jivesoftware.openfire. ConnectionManager 接口类中定义的DEFAULT_PORT、DEFAULT_SSL_PORT、DEFAULT_COM

11、PONENT_PORT 等),Openfire中比较重要的配置位置包括:一、 src/conf 目录下的 openfire.xml 配置文件。该配置文件为系统核心配置文件。在第一次启动 Openfire 并通过管理控制台完成安装配置后会往该配置文件中填入相应的配置信息。二、 plugin.xml 配置文件。该配置文件为各插件包下的核心配置文件,由它确定插件核心处理类和相应页面插件的展现等。配置项及含义详见官方插件开发说明部分。三、 web.xml 和 web-custom.xml 配置文件。用于配置 servlet 和用户自定义 servlet(插件页面用,放在插件对应目录下)。四、 ofpr

12、operty 中的各条记录,该表中包括两个字段 name 和 propvalue,分别代表配置项名和配置项值。系统启动流程系统启动时调用 ServerStarter 类中的 start()方法,通过反射加载org.jivesoftware.openfire.XMPPServer 类文件,创建实例时调用其构造函数,#*在其构造函数中调用其 start()方法实际启动服务应用程序。Start()方法中首先调用 verifyDataSource()方法验证并确保数据库可以访问,然后会调用 loadModules();initModules();startModules();方法来对 Module 接

13、口的实现类的各子类进行操作,依次完成模块的加载、初始化和启动操作。loadModules()方法中会调用loadModule(String module)方法通过反射加载各模块类,参数字符串 module 为对应的模块核心处理类的类名,如 AdHocCommandHandler。现以 AdHocCommandHandler 为例对接下来的处理流程进行说明。通过 loadModule 创建 AdHocCommandHandler 类实例时调用其构造函数,在构造函数中初始化了其私有 AdHocCommandManager 对象。在initModules()时调用 AdHocCommandHandl

14、er 实例的 initialize(XMPPServer server)方法对其私有属性对象进行初始化。然后调用 start()方法,调用addDefaultCommands 方法添加命令并启动命令(通过调用startCommand(AdHocCommand command)方法实现)。网络处理消息监听服务SSL 等监听服务的调度在 ConnectionManagerImpl 类中实现。ConnectionManagerImpl.createClientSSLListeners()方法启动 SSL 监听消息封装信息处理采用 XML 节的方式传递信息,消息封装通常采用IQ、Message、Pre

15、sence。#*Openfire 消息包接受处理流程#*数据库处理Openfire 的数据库处理采用直接调用 JDBC 的方式。核心类为org.jivesoftware.database.DbConnectionManager。数据库的处理与业务处理耦合,没有划分出专门的业务逻辑层。ConnectionProvider此类为数据库提供者接口,如需连接 mysql、hsqldb 等数据库,需首先实现些接口,处理方式通常直接调用 XXManager 中的实例方法,XXManager 中又调用的是对应的接口 XXProvider 的方法,实际操作在该接口的实现类中实现。实现类是动态绑定的(默认的实现

16、类通常命名规则为 DefaultXXProvider),在运行时根据ofproperty 表中对应配置项值选择。下面以添加用户组为例进行说明。首先获得 GroupManager 的一个实例,在调用其构造函数时调用initProvider()方法,在该方法中获取数据库中配置项的值,若不为空则根据该值通过反射机制获取 GroupProvider 接口的实现类实例对象;若为空则以DefaultGroupProvider 作为 GroupProvider 接口的实现类并创建实例对象,然后调用 GroupProvider. createGroup(String name)方法完成业务操作。常用类org.

17、jivesoftware.database.DbConnectionManager连接管理类org.jivesoftware.util.JiveGlobals通常用于操作 ofproperty 表中记录openfire 数据结构数据库表以下是一个说明每个表格的 Openfire 数据库架构。黄色行表示主键。 ofGroup ofGroupProp #* ofGroupUser ofID ofOffline ofPresence ofPrivate ofUser ofUserProp ofUserFlag ofRoster ofRosterGroups ofPrivacyList ofVCard

18、 ofVersion ofProperty ofExtComponentConf ofRemoteServerConf ofSecurityAuditLog ofMucService ofMucServiceProp ofMucRoom ofMucRoomProp ofMucAffiliation ofMucMember ofMucConversationLog #* ofPubsubNode ofPubsubNodeJIDs ofPubsubNodeGroups ofPubsubAffiliation ofPubsubItem ofPubsubSubscription ofPubsubDef

19、aultConf ofGroup (用户组的数据)列名 类型 长度 描述groupName VARCHAR 50 组名称(主键)description VARCHAR 255 组描述ofGroupProp (名称值协会为一组)列名 类型 长度 描述groupName VARCHAR 50 组名称(主键)name VARCHAR 100 组属性名称(主键)propValue VARCHAR 4000 组属性值ofGroupUser (组成员)列名 类型 长度 描述groupName VARCHAR 50 组名称(主键)username VARCHAR 100 用户名(主键)administrat

20、or NUMBER n/a 是否为管理员(布尔)(主键)ofID (用于唯一 ID 序列生成)列名 类型 长度 描述idType NUMBER n/a 证件类型(例如,组,用户名册)(主键)id NUMBER n/a 下一个可用块编号的(用于数据库独立编号)ofOffline (离线邮件存储)列名 类型 长度 更改username VARCHAR 32 用户名(主键)messageID NUMBER n/a 存储信息的编号(主键)creationDate VARCHAR 15 日期信息存储messageSize NUMBER n/a 邮件的大小以字节为单位stanza TEXT n/a 消息文

21、本ofPresence (离线的存在)列名 类型 长度 更改username VARCHAR 64 用户名(主键)#*offlinePresence TEXT n/a 存在的信息设置为用户注销offlineDate CHAR 15 信息存储日期ofPrivate (私人数据存储)列名 类型 长度 描述username VARCHAR 32 用户名(主键)name VARCHAR 100 姓名私营项(主键)namespace VARCHAR 200 名字空间私营项(主键)privateData TEXT n/a 价值的私人数据ofUser (用户数据)列名 类型 长度 描述username VA

22、RCHAR 32 用户名(主键)plainPassword VARCHAR 32 纯文字密码数据encryptedPassword VARCHAR 255 加密的密码数据(默认)name VARCHAR 100 名字email VARCHAR 100 电邮地址creationDate VARCHAR 15 创建日期modificationDate VARCHAR 15 最后更新日期ofUserProp (名称值协会针对用户)列名 类型 长度 描述username VARCHAR 32 用户名(主键)name VARCHAR 100 用户属性名称(主键)propValue VARCHAR 400

23、0 用户属性值ofUserFlag (用户类型标识(如残疾人)列名 类型 长度 描述username VARCHAR 64 用户名(主键)name VARCHAR 100 用户属性名称(主键)startTime CHAR 15 国旗的时候,开始被有效(无效的现在 )endTime CHAR 15 当时国旗是结束有效(无效的永远 )ofRoster (好友列表)列名 类型 长度 描述rosterID NUMBER n/a 编号名册(主键)username VARCHAR 32 用户名jid TEXT n/a 地址名册入境sub NUMBER n/a 认购地位入境ask NUMBER n/a 卖出地位入境recv NUMBER n/a 检举表明进入名册收到请求nick VARCHAR 255 昵称分配给这个名册入境ofRosterGroups (组的好友名单中的条目)列名 类型 长度 描述rosterID NUMBER n/a 名册编号(主键)

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。