该文档是收录的openfire群中一个朋友收录的类说明

1. build path:
a) source folder:包括openfire和各插件的代码。
b) libraries:build/lib下jar包和插件下jar包,jdk/lib/tools.jar(编译jsp需要)。

2. ant build:build/build.xml
a) openfire(default):构建openfire。
b) plugins:构建所有插件。
c) plugin –Dplugin=search:构建插件search。

3. start server:org.jivesoftware.openfire.starter.ServerStarter
a) VM arguments:根、库、插件目录和调试模式 -DopenfireHome=target/openfire -Dopenfire.lib.dir=target/openfire/lib -DpluginDirs=target/openfire/plugins -DdevelopmentMode=true
b) classpath: src/i18n:国际化文本。 src/resources/jar:MIME类型和Console配置文件。

4. running:
a) ServerStarter:更新ClassLoader,将lib加进来,实例化唯一的XMPPServer。
b) XMPPServer: i. 初始化:定位openfireHome,JiveGlobals读取conf/openfire.xml,JiveProperties读取数据库表 ofproperty,获取host,设置version,初始化PluginManager,检查数据库。 ii. 加载、初始化、启动模块:Model:initialize,start,stop,destroy,getName;其他接 口:ServerFeaturesProvider,特性支持; iii. BasicModule:私有域name,停止时stop和destroy。
1. boot modules:
a) RoutingTableImpl:所有消息路由。
b) AuditManagerImpl:实现AuditManager。
c) RosterManager:所有花名册管理。
d) PrivateStorage:所有隐私管理。
2. core modules:
a) PresenceManagerImpl:所有状态管理。
b) SessionManager:所有会话管理。
c) PacketRouterImpl:转给IQRouter、MessageRouter、PresenceRouter。
d) MulticastRouter:广播特性,路由带多个地址(addresses)的包。
e) PacketTransporterImpl:传送包:PacketDelivererImpl:实现PacketDeliver,转移处理;TransportHandler:网关处理。
f) OfflineMessageStrategy:离线留言策略。OfflineMessageStore:存储离线留言。
g) VCardManager:用户名片管理。
3. standard modules:
a) IQHandler:全部被交给。IQBindHandler:处理绑定资源请求;IQSessionEstablishmentHandler:绑定资 源后激活会话;IQAuthHandler:处理登录请求;IQPingHandler:处理ping请求;IQPrivateHandler:处理隐私 请求;IQPrivacyHandler:处理私有列表请求;IQRegisterHandler:处理注册请求;IQRosterHandler:处理 花名册请求;IQTimeHandler:处理时间请求。IQvCardHandler:处理名片请求;IQVersionHandler:处理版本请 求;IQLastActivityHandler:处理最近活动请求;IQOfflineMessagesHandler:处理获取离线留言请 求;IQPEPHandler:处理公共订阅请求;IQPEPOwnerHandler;IQSharedGroupHandler:处理共享组请 求;AdHocCommandHandler:处理命令请求;IQDiscoInfoHandler;IQDiscoItemsHandler。
b) PresenceSubscrieHandler:处理状态订阅请求。PresenceUpdateHandler:处理状态请求。
c) MulticastDNSService:发布服务器信息。
d) DefaultFileTransferManager:实现FileTransferManager,管理文件传输;FileTransferProxy:
e) MediaProxyService:多媒体传输协议供jingle使用。
f) STUNService:点对点支持。
g) PubSubModule:
h) UpdateManager:检查服务器和插件升级版本。
i) FlashCrossDomainHandler:
j) InternalComponentManager:管理组件。
k) MultiUserChatManager:管理多人聊天。
l) ClearspaceManager:
m) ConnectionManagerImpl:实现ConnectionManager,处理连接请求。
n) WorkGroupSupport:工作组支持 iv. StatisticsManager,PubSubEngine监听服务启动。 v. PluginManager:监视并加载插件目录下的插件。

5. serving:
a) 登录:ConnectionManager声明了五种连接:client、client ssl、external component、other server、connection manager,它们有各自的端口并且可禁用。ConnectionManagerImpl创建多个SocketAcceptor监听各个端口,并绑定不 同的ConnectionHandler:管理会话,创建各自的NIOConnection和StanzaHandler并将消息交给后者处理,它创建不 同的LocalSession。 client client ssl external component connection manager SocketAccepter SocketAccepter SocketAccepter SocketAccepter ClientCH ClientCH ComponentCH MultiplexerCH ClientSH ClientSH ComponentSH MultiplexerSH LClientS LClientS LComponentS LConnectionMultiplexerS L*S 消息路径:(SocketAccepter)IoSession = > ConnectionHandler => NIOConnection、StanzaHandler => PacketRouter(LocalSession),然后分IQ、Presence、Message分别路由。
b) IQRouter:RoutingTable、MulticastRouter、SessionManager、UserManager、 IQHandler。错误的包交给从SessionManager获得的Session,广播交给MulticastRouter,给其他人的包交给 RoutingTable(错误也路由给自己),剩下的交给IQHandler(根据包里的namespace找到唯一的处理者)。
c) PresenceRouter:RoutingTable(路由)、MulticastRouter(广播)、SessionManager(出错)、 PresenceManager(探测)、PresenceUpdateHandler(更新)、PresenceSubscribeHandler(订 阅)。
d) MessageRouter:RoutingTable、MulticastRouter、SessionManager、UserManager(判断注册)、OfflineMessageStrategy(保存留言)。
e) 关键类的理解:
i. ClientConnectionHandler:负责监听IoSession的建立、收发消息和关闭,并且构建Conection和StanzaHandler,收到的消息交给后者,通过前者发送消息。
ii. NIOConnection:保存了表示与用户之间连接的IoSession,通过它发送消息给用户,或者使用PacketDeliver转发消息作为离线留言存储;它通常被Session使用。
iii. ClientStanzaHandler:先建立Session(最终是SessionManager创建并注入Connection),收到的消息交给 PacketRouter处理。 iv. LocalClientSession:保存用户信息(IQAuthHandler处理登录),设置用户状态,给用户发送消息,由 SessionManager统一管理。
f) 路由功能类:
i. MulticastRouter:广播发送给服务器且有addresses元素的包。
ii. RoutingTableImpl:routePacket转发消息给user、component、server。
iii. IQHandler:处理IQ包。IQAuthHandler处理用户登录,IQBindHandler处理资源绑定,
iv. PresenceUpdateHandler:通过Session设置用户状态。 v. PresenceSubscribeHandler:处理状态订阅包。
g) 管理者类:
i. RosterManager:管理Roster,每个花名册可以广播用户状态给好友。
ii. PrivacyListManager:管理PrivacyList,如果不阻止联系人就发给他状态,使用PrivacyListProvider从数据库加载隐私列表。
iii. UserManager:管理或创建User,更改密码,使用UserProvider从数据库加载用户信息。
iv. PresenceManager:管理用户最后活动状态,用户上下线状态信息。
v. GroupManager:使用GroupProvider管理用户组。
vi. VCardManager:使用VCardProvider管理用户名片。
h) 工厂类:
i. AuthFactory:可配AuthProvider,验证用户登录、获得并加解密用户密码,登录后会告诉UserManager通过UserProvider加载User。
i) 其他类:
i. AdminConsole:获得程序名称和版本,添加删除模块。 逻辑简要: ConnectionManagerImpl作为最后一个模块被加载、初始化和启动,它使用mina-core.jar中的 SocketAcceptor、IoSession、IoHandler等处理底层通讯。ClientConnectionHandler是个 IoHandler,它监听用户连接请求并用打开的IoSession建立NIOConnection(它调用IoSession发消息给用户)和 ClientStanzaHandler,后者通过SessionManager为用户建立LocalClientSession并注入 NIOConnection,而从用户收到的Packet则让PacketRouter转发给IQRouter、PresenceRouter和 MessageRouter,出错信息可能由Sesssion处理后交给Connection返回给用户,处理成功则让RoutingTableImpl 路由给接受者,IQAuthHandler处理用户登录认证的包Authentication然后设置Session的状态为已认证,广播包由 MulticastRouter处理,查询包由相应名称空间的IQHandler处理,状态包由PresenceUpdateHandler和 PresenceSubscribeHandler处理,消息包一般由RoutingTable的routePacket路由给接收者的Session, 如果接收者没有登录则返回给MessageRouter的routingFailed,它调用OfflineMessageStrategy保存为离线消 息。

时间: 2024-10-06 00:22:03

该文档是收录的openfire群中一个朋友收录的类说明的相关文章

在PDF文档这样做注释,6到没朋友~

福昕阅读器是我们阅读PDF文档比较常用的工具,阅读的时候,我们经常会做一些注释,但你知道如何做注释才是最快的吗? 打开"定制功能区" 在福昕阅读器导航栏的空白区域,点击鼠标右键,选择"定制功能区": 设置.操作.批量删除注释 弹出弹窗"自定义工具栏",点击"键盘"-"注释",设置常用注释的快捷键: 选中文本,按下设置的快捷键即可快速注释: 如需要批量删除注释,可点击"选择"--"

利用Python3内置文档资源高效学习及官方中文文档

从前面的对Python基础知识方法介绍中,我们几乎是围绕Python内置方法进行探索实践,比如字符串.列表.字典等数据结构的内置方法,和大量内置的标准库,诸如functools.time.threading等等,而我们怎么快速学习掌握并学会使用这个Python的工具集呢? 我们可以利用Python的内置文档大量资源既可以掌握许多关于Python工具集的基本使用. dir函数 Python中内置的dir函数用于提取某对象内所有属性的方法,,诸如对象的方法及属性 L = [1, 2, 3, 4] p

Elasticsearch-用于定义文档字段的核心类型-字符串类型

ES-用于定义文档字段的核心类型 ES中一个字段可以是核心类型之一,如字符串.数值.日期.布尔型,也可以是一个从核心类型派生的复杂类型,如数组. 字符串类型 索引一类型为字符串的数据doc1: FengZhendeMacBook-Pro:bin FengZhen$ curl -XPUT 'localhost:9200/music/album/2' -d '{ > "name":"Late Night with Elasticsearch", > &quo

mango-1.4.1 文档

文档目录 快速开始 添加依赖包 数据库准备 创建HelloWorld类 书写插入与查询方法 构造数据源并初始化mango对象 获取dao并调用插入与查询方法 查看完整示例代码和表结构 基本操作 准备工作 更新 insert操作 delete操作 update操作 查询 查询单个属性 查询自定义对象 查询多行数据 使用in语句进行查询 批量更新 全局表名 查看完整示例代码和表结构 参数绑定 序号绑定 重命名绑定 列表参数绑定 属性绑定 属性自动匹配 混合绑定 查看完整示例代码和表结构 查询映射 映

elasticsearch 路由文档到分片

路由文档到分片 当你索引一个文档,它被存储在单独一个主分片上.Elasticsearch是如何知道文档属于哪个分片的呢?当你创建一个新文档,它是如何知道是应该存储在分片1还是分片2上的呢? 进程不能是随机的,因为我们将来要检索文档.事实上,它根据一个简单的算法决定: shard = hash(routing) % number_of_primary_shards routing值是一个任意字符串,它默认是_id但也可以自定义.这个routing字符串通过哈希函数生成一个数字,然后除以主切片的数量

跟我学SharePoint 2013视频培训课程——签出、签入文档(9)

课程简介 第9天,怎样在SharePoint 2013中签出.签入文档 视频 SharePoint 2013 交流群 41032413

石墨文档的云端表格实时压缩策略

多人实时协作是石墨文档吸引人的一大特性之一.使用石墨文档,你可以和同事.朋友同时编写一篇文档或表格,每个人的修改都会实时的同步给其他人.你可以看到每个人光标的跳动,每一个键入的文字.一篇篇运营文案.一份份产品头脑风暴,伴着一杯杯茶与咖啡,就这样在石墨文档上诞生了. 美好的事物背后总是充满艰辛.在技术实现上,多人实时编写会造成许多的冲突,拿表格来说,当用户 Bob 在 B2 单元格编写内容的时候,他的朋友 Jeff 在 B 列的前面又插入了一列,如果两个操作同时发给服务器就会产生冲突.在石墨文档,

MongoDB改动、删除文档的域属性实例

MongoDB改动.删除文档的域属性实例 在站点的开发中,可能最初的设计不合理.或者后期业务的变更,会造成文档结构会有些无用的属性.须要去删除或改动.因为MongoDB 是无 Schema 的,不像关系数据库那样列属性定义在表而非记录中,MongoDB 的集合中的每一个文档能够拥有各自不同的域属性.MongoDB 中使用 db.collections.update 改动集合中若干文档的域属性,使用 $set 添加域.$unset 删除域. 删除集合中全部文档的一个域 db.posts.updat

[Elasticsearch] 分布式文档存储

本文翻译自Elasticsearch官方指南的distributed document store一章. 分布式文档存储 在上一章中,我们一直在介绍索引数据和获取数据的方法.但是我们省略了很多关于数据是如何在集群中被分布(Distributed)和获取(Fetched)的技术细节.这实际上是有意为之 - 你真的不需要了解数据在ES中是如何被分布的.它能工作就足够了. 在本章中,我们将会深入到这些内部技术细节中,来帮助你了解你的数据是如何被存储在一个分布式系统中的. 路由一份文档(Document