最新openfire处理消息流程-及openfire详细信息

上传人:夏** 文档编号:454915092 上传时间:2023-06-15 格式:DOC 页数:101 大小:936KB
返回 下载 相关 举报
最新openfire处理消息流程-及openfire详细信息_第1页
第1页 / 共101页
最新openfire处理消息流程-及openfire详细信息_第2页
第2页 / 共101页
最新openfire处理消息流程-及openfire详细信息_第3页
第3页 / 共101页
最新openfire处理消息流程-及openfire详细信息_第4页
第4页 / 共101页
最新openfire处理消息流程-及openfire详细信息_第5页
第5页 / 共101页
点击查看更多>>
资源描述

《最新openfire处理消息流程-及openfire详细信息》由会员分享,可在线阅读,更多相关《最新openfire处理消息流程-及openfire详细信息(101页珍藏版)》请在金锄头文库上搜索。

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

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

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

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

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

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

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

8、r对象的各实际方法完成实际业务)。XXPlugin实现Plugin接口的插件类,需实现initializePlugin(PluginManager manager, File pluginDirectory)方法和destroyPlugin()方法。在其初始化方法中调用Dispatcher实现类的addListener()方法如PropertyEventDispatcher.addListener(this)。XXProvider实现面向接口编程方式的接口类,通过反射机制创建具体实现类的对象,反射类名配置在ofproperty表对应的记录propvalue属性中。若没有相关配置,则调用默认实现

9、类,默认实现类类名命名规则为DefaultXXProvider。XXHandler实际处理类,以ConnectionHandler为例,在org.jivesoftware.openfire.spi. ConnectionManagerImpl类的startClientSSLListeners(String localIPAddress)方法中,有这样一段代码:sslSocketAcceptor.bind(new InetSocketAddress(bindInterface, port), new ClientConnectionHandler(serverName);其中bind方法的第二个

10、参数是新创建的一个ClientConnectionHandler的实例,而它就是ConnectionHandler的一个子类。系统配置项Openfire的系统配置项采用文件结合数据库表的方式配置,也有部分默认配置项通过Java硬编码方式配置(如org.jivesoftware.openfire. ConnectionManager接口类中定义的DEFAULT_PORT、DEFAULT_SSL_PORT、DEFAULT_COMPONENT_PORT等),Openfire中比较重要的配置位置包括:一、 src/conf目录下的openfire.xml配置文件。该配置文件为系统核心配置文件。在第一次

11、启动Openfire并通过管理控制台完成安装配置后会往该配置文件中填入相应的配置信息。二、 plugin.xml配置文件。该配置文件为各插件包下的核心配置文件,由它确定插件核心处理类和相应页面插件的展现等。配置项及含义详见官方插件开发说明部分。三、 web.xml和web-custom.xml配置文件。用于配置servlet和用户自定义servlet(插件页面用,放在插件对应目录下)。四、 ofproperty中的各条记录,该表中包括两个字段name和propvalue,分别代表配置项名和配置项值。系统启动流程系统启动时调用ServerStarter类中的start()方法,通过反射加载org

12、.jivesoftware.openfire.XMPPServer类文件,创建实例时调用其构造函数,在其构造函数中调用其start()方法实际启动服务应用程序。Start()方法中首先调用verifyDataSource()方法验证并确保数据库可以访问,然后会调用 loadModules();initModules();startModules();方法来对Module接口的实现类的各子类进行操作,依次完成模块的加载、初始化和启动操作。loadModules()方法中会调用loadModule(String module)方法通过反射加载各模块类,参数字符串module为对应的模块核心处理类的

13、类名,如AdHocCommandHandler。现以AdHocCommandHandler为例对接下来的处理流程进行说明。通过loadModule创建AdHocCommandHandler类实例时调用其构造函数,在构造函数中初始化了其私有AdHocCommandManager对象。在initModules()时调用AdHocCommandHandler实例的initialize(XMPPServer server)方法对其私有属性对象进行初始化。然后调用start()方法,调用addDefaultCommands方法添加命令并启动命令(通过调用startCommand(AdHocCommand

14、 command)方法实现)。网络处理消息监听服务SSL等监听服务的调度在ConnectionManagerImpl类中实现。ConnectionManagerImpl.createClientSSLListeners()方法启动SSL监听消息封装信息处理采用XML节的方式传递信息,消息封装通常采用IQ、Message、Presence。Openfire消息包接受处理流程数据库处理Openfire的数据库处理采用直接调用JDBC 的方式。核心类为org.jivesoftware.database.DbConnectionManager。数据库的处理与业务处理耦合,没有划分出专门的业务逻辑层。C

15、onnectionProvider此类为数据库提供者接口,如需连接mysql、hsqldb等数据库,需首先实现些接口,处理方式通常直接调用XXManager中的实例方法,XXManager中又调用的是对应的接口XXProvider的方法,实际操作在该接口的实现类中实现。实现类是动态绑定的(默认的实现类通常命名规则为DefaultXXProvider),在运行时根据ofproperty表中对应配置项值选择。下面以添加用户组为例进行说明。首先获得GroupManager的一个实例,在调用其构造函数时调用initProvider()方法,在该方法中获取数据库中配置项的值,若不为空则根据该值通过反射机制获取GroupProvider接口的实现类实例对象;若为空则以DefaultGroupProvider作为GroupProvider接口的实现类并创建实例对象,然后调用GroupProvider. createGroup(String name)方法完成业务操作。常用类or

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号