openfire处理消息流程,及openfire详细信息.doc
《openfire处理消息流程,及openfire详细信息.doc》由会员分享,可在线阅读,更多相关《openfire处理消息流程,及openfire详细信息.doc(87页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
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 是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可靠性的网络应用程序。它提供了一个通过Java
5、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、Plugi
7、n、Listener、Dispatcher、Handler、Manager、Provider,通常情况下,这些命名类包括如下意义:XXStarter 系统启动类,如 org.jivesoftware.openfire.starter.ServerStarter,调用其 start()方法可启动系统应用。XXListener业务的最终处理类。XXDispatcher调度类,其中有很多关键方法,如 addListener(),以组合的方式,为类内定义的静态 Set实例添加 XXListener 对象。以便调用dispatchEvent(String property, EventType even
8、tType, 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 InetSocketAddre
10、ss(bindInterface, port), new ClientConnectionHandler(serverName);其中bind方法的第二个参数是新创建的一个ClientConnectionHandler的实例,而它就是ConnectionHandler的一个子类。系统配置项Openfire 的系统配置项采用文件结合数据库表的方式配置,也有部分默认配置项通过 Java 硬编码方式配置(如 org.jivesoftware.openfire. ConnectionManager 接口类中定义的DEFAULT_PORT、DEFAULT_SSL_PORT、DEFAULT_COMPONE
11、NT_PORT 等),Openfire中比较重要的配置位置包括:一、 src/conf 目录下的 openfire.xml 配置文件。该配置文件为系统核心配置文件。在第一次启动 Openfire 并通过管理控制台完成安装配置后会往该配置文件中填入相应的配置信息。二、 plugin.xml 配置文件。该配置文件为各插件包下的核心配置文件,由它确定插件核心处理类和相应页面插件的展现等。配置项及含义详见官方插件开发说明部分。三、 web.xml 和 web-custom.xml 配置文件。用于配置 servlet 和用户自定义 servlet(插件页面用,放在插件对应目录下)。四、 ofproper
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- openfire 处理 消息 流程 详细信息
限制150内