Openfire源码分析—图文兼备.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Openfire源码分析—图文兼备

Openfire源码分析 1. Openfire Openfire是开源的实时协作服务器(RTC),它是基于公开协议XMPP(也成为Jabber)消息的。Openfire的核心功能可以概括为:连接管理、消息解析、消息路由、消息发送。 1.1 框架 Openfire核心功能由Module组成,上图中的各个模块绝大多数也是基于Module实现的。为了动态的管理这些Module,Openfire使用了自己的类加载器JiveClassLoader,这样就可以在不重新启动系统的前提下进行Module的安装、卸载和重新加载。 1.2 Module Openfire在启动时就加载了所有的Module,这些Module提供了Openfire的核心功能。 所有Module都需要实现Module接口,该接口中定义了模块生命周期中需要调用的方法,如下图所示: 1.3 数据流 2. Openfire与MIMA MINA是Apache组织下的一个项目,它可以帮助用户轻松的开发高性能和高扩展性的网络应用。MINA提供了一个抽象的、支持各种传输协议的(如TCP/IP、UDP/IP)、基于Java NIO的异步事件驱动的API。 Openfire的ConnectionHandler类继承了MINA的IoHandlerAdaper,他主要负责连接的创建、销毁,以及接收到XML数据包的投递。ConnectionHandler有三个子类,其中ClientConnectionHandler负责客户端与服务器端的连接,ComponentConnectionHandler负责组件与服务器端的连接。 3. Multi-User-Chat 多人聊天的消息是绑定在子域conference上的,对应的Component是MultiUserChatServiceImpl。在多人聊天中,涉及到的实体与关系有:用户、聊天室、用户与聊天室的关系,MultiUserChatServiceImpl就负责这些实体与关系的维护以及消息的投递。 3.1 MUCUser MUCUser是参与群聊用户的一个抽象,用于与聊天服务器进行交互,比如发送和接收聊天信息。 3.2 MUCRole 定义了MUCRoom与MUCUser的关系。同一个MUCUser在不同的MUCRoom中可以有不同的角色。 3.3 MUCRoom 包含聊天室的基本信息及参与人、聊天记录等信息。 3.4 MultiUserChatServiceImpl 管理所有的聊天室,并负责消息的分发。 3.5 时序图 4. Pub-Sub 发布订阅消息是绑定在子域pubsub上的,对应的模块是PubSubModule。 4.1 Node 发布订阅系统中的虚拟节点,该节点可以接收或者发布各类信息或通知。在其他发布订阅系统中常被称为TOPIC。 CollectionNode可以包含子节点,子节点的类型可以是CollectionNode或者LeafeNode,该类型的节点不能作为发布订阅的目标节点;LeafeNode不能包含子节点,它可以作为发布订阅的目标节点。 4.2 NodeAffiliate 定义了用户与节点之间的关系,包括:ower、publisher、none、outcast。 4.3 NodeSubscription 一个用户可以订阅某个节点多次,每次订阅都使用不同的配置(比如过滤关键字不同),NodeSubscription就是描述这些订阅和配置的。如果一个消息满足用户的多个订阅,则只有一份消息被分发给该用户,而不是多个。 4.4 PubSubModule PubSubModule负责节点的管理、发布订阅关系的维护、消息的分发。 4.5 PubSubEngine 负责处理发布订阅数据包。 4.6 时序图 5 插件开发 在Openfire中,插件可以直接使用所有的Openfire API,这为插件的功能提供了极大的灵活性。 5.1 注册为组件 注册一个插件作为一个组件,组件可以接收发送给特定子域的所有数据包。例如上述的组件MultiUserChatServiceImpl就可以接收到所有发送给conference子域的数据包。所有的组件由InternalComponentManager Module进行管理。 在TestPlugin的initializePlugin方法中初始化TestComponent实例,并调用InternalComponentManager将初始化的实例注册到目标子域名中,这样TestComponent组件就能接收到并处理发送到目标子域的消息。 5.2 注册为拦截器 注册一个组件为拦截???,那该组件可以接收所有的数据包,并且可以随意的抛弃他们。 在TestPlugin中的initializePlugin方法中初始化该

文档评论(0)

cuotian + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档