openfire build
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:处理隐私请求;
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保存为离线消息。
openfire build的更多相关文章
- openfire build(2)
InterceptorManager PluginManager openfire 插件的中servlet 在web-custom.xml 中的配置 url 一定要小写,访问时不区别大写小 否则404 ...
- 配置Openfire的eclipse项目
官方文档在这里 Install JDK Download JDK and install them. The least version should be 1.5. I use 1.6. Sorry ...
- 跟我一步一步开发自己的Openfire插件
http://www.blogjava.net/hoojo/archive/2013/03/07/396146.html 跟我一步一步开发自己的Openfire插件 这篇是简单插件开发,下篇聊天记录插 ...
- openfire :openfire 不同类型插件的开发示例
新建一个自己的Javaproject工程,添加的jar包如下: 将jasper-compiler.jar.jasper-runtime.jar.servlet.jar添加到新建的工程中.如果没有jar ...
- 部署openfire到linux环境下
1.java环境部署:具体参考 http://blog.csdn.net/gufachongyang02/article/details/45337379 2.ant环境部署: 具体参考 http:/ ...
- openfire插件开发环境
创建java工程 SamplePlugin: package com.hoo.server.plugin; import java.io.File; import org.jivesoftware.o ...
- eclipse下编译openfire3.9.1源码
[一].下载源码 打开网址:http://www.igniterealtime.org/downloads/source.jsp 选择目前最新版本 openfire_src_3_9_1.zip 下载. ...
- 技术笔记:XMPP之openfire+spark+smack
在即时通信这个领域目前只找到一个XMPP协议,在其协议基础上还是有许多成熟的产品,而且是开源的.所以还是想在这个领域多多了解一下. XMPP协议:具体的概念我就不写了,毕竟这东西网上到处是.简单的说就 ...
- Openfire Strophe开发中文乱码问题
网站上有很多Openfire Web方案,之前想用Smack 但是jar包支持客户端版本的,还有JDK版本问题 一直没调试成功 估计成功的方法只能拜读源码进行修改了. SparkWeb 官网代码很 ...
随机推荐
- Cocoapods完整使用篇
温馨提示:在篇文章中所使用的Xcode版本为Xcode7. 一.什么是CocoaPods? 简单来说,就是专门为iOS工程提供对第三方库的依赖的管理工具,通过CocoaPods,我们可以单独管理每 ...
- SQL注入基础入门
一般的WEB架构 SQL注入成因: 用户开启浏览器并连接http://www.xxx.com.位于逻辑层的Web服务器从文件系统中加载脚本将其传递给脚本引擎,脚本引擎负责解析并执行脚本. 脚本使用数据 ...
- iframe子页面获取父页面元素的方法
在iframe子页面获取父页面元素 代码如下: $.('#objld', parent.document); 在父页面获取iframe子页面的元素 代码如下: $("#objid" ...
- JavaScript中setInterval用法
setInterval动作的作用是在播放动画的时,每隔一定时间就调用函数,方法或对象.可以使用本动作更新来自数据库的变量或更新时间显示. setInterval动作的语法格式如下:setInterva ...
- mysql 相关博客地址
MySQL概念学习与逐步上手操作系列(一套完整) https://www.cnblogs.com/zlslch/category/962962.html
- linux环境tomcat配置及hadoop 2.6伪分布模式安装配置
一.ubuntu 15.04.openjdk1.7.tomcat7环境配置 1. 配置openjdk1.7,输入命令: -jdk 2. 查看java是否安装成功,输入命令: envjava -vers ...
- OpenCV 入门示例之四:一个简单的变换
前言 图像的平滑处理,是计算机视觉中非常重要的操作,本文将展示一个可以对图像进行平滑处理的简单程序.而关于平滑处理深层次的知识,会在以后的文章中重点探讨. 代码示例 // 此头文件包含图像IO函数的声 ...
- 点击textbox弹出对话框,返回弹出对话框的值
主要是在父页面使用 function PopupWindow() { window.open(url, "", "status=no,resizab ...
- struts2 环境建立(1)
说明:以下操作都是以本机例 在java web 开发之前,应该具备开发环境.要搭建开发环境应该具备以下工作: 1 JDK,jdk是java开发不可缺少的开发工具包. 2. 开发工具本例使用Eclips ...
- BZOJ4920: [Lydsy1706月赛]薄饼切割
BZOJ4920: [Lydsy1706月赛]薄饼切割 Description 有一天,tangjz送给了quailty一张薄饼,tangjz将它放在了水平桌面上,从上面看下去,薄饼形成了一个H*W的 ...