文档章节

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

今幕明
 今幕明
发布于 2015/03/04 10:58
字数 1495
阅读 117
收藏 5

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保存为离线消 息。
         

本文转载自:http://ericxiong.iteye.com/blog/1876679

今幕明
粉丝 47
博文 230
码字总数 39350
作品 0
朝阳
程序员
私信 提问
为中国开源事业加油 - 纪念 OSC 收录软件超过2万

为中国开源事业加油 - 纪念 OSChina.NET 收录超过2万个开源项目 自 OSChina.NET(开源中国)成立三年以来,小编们勤勤恳恳地以平均每天20款的速度收录着每一个能找到的开源软件(项目),包括...

虫虫
2012/04/09
4K
153
网站降权被K的原因全面解析【附解决方案】

一、网站降权表现形式 1.site:主网址,不在首位 这是最简单的的一个查看网站健康情况的方法,主域名不在首位说明网站很可能已经被降权了;若是不在首页那么你就要小心了,网站随时都有被k的可...

amao0712
2018/05/29
0
0
openfire用eclipse编译

这次我们的项目是用openfire作为IM的服务端,以前听说过,但是没有接触过,直接到官方下载源代码,现在开源了,而且部署很方便,不过需要研究下他的原理和结构。公司网站:www.weigecheng.co...

siyimu
2012/05/22
449
0
OSCHINA 投递新闻和添加软件操作指南

>> OSCHINA 社区用户手册 >> OSCHINA 社区积分规则 >> OSCHINA 社区礼仪-用户言论规范说明 >> OSCHINA 协作翻译审核考察点 每天都有关于开源的大事要事在发生着,看到社区没有及时的更新?别...

编辑部的故事
2017/09/25
6.4K
20
Nutz 1.b.37 发布啦!

Top 春暖花开,万物复苏,那啥的那啥在地震后那啥了;那谁谁因为用飞架炸了自己的那谁谁而被那谁谁给那啥了;当然还有那谁因为不减肥而且还要做飞机去做 展会,在机场被伟大的那啥给那啥了....

wendal
2011/04/25
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

Replugin借助“UI进程”来快速释放Dex

public static boolean preload(PluginInfo pi) { if (pi == null) { return false; } // 借助“UI进程”来快速释放Dex(见PluginFastInstallProviderProxy的说明) return PluginFastInsta......

Gemini-Lin
今天
4
0
Hibernate 5 的模块/包(modules/artifacts)

Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义...

honeymoose
今天
4
0
CSS--属性

一、溢出 当内容多,元素区域小的时候,就会产生溢出效果,默认是纵向溢出 横向溢出:在内容和容器之间再套一层容器,并且内部容器要比外部容器宽 属性:overflow/overflow-x/overflow-y 取值...

wytao1995
今天
4
0
精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
今天
7
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部