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,码迷,mamicode.com

时间: 2024-10-12 20:20:41

openfire build的相关文章

openfire build(2)

InterceptorManager PluginManageropenfire 插件的中servlet 在web-custom.xml 中的配置 url 一定要小写,访问时不区别大写小 否则404如: <servlet> <servlet-name>Sample1Servlet</servlet-name> <servlet-class>com.myyule.openfire.plugin.Sample1Servlet</servlet-class&

openfire插件开发环境

创建java工程 SamplePlugin: package com.hoo.server.plugin; import java.io.File; import org.jivesoftware.openfire.XMPPServer; import org.jivesoftware.openfire.container.Plugin; import org.jivesoftware.openfire.container.PluginManager; public class SamplePl

跟我一步一步开发自己的Openfire插件

http://www.blogjava.net/hoojo/archive/2013/03/07/396146.html 跟我一步一步开发自己的Openfire插件 这篇是简单插件开发,下篇聊天记录插件. 开发环境: System:Windows WebBrowser:IE6+.Firefox3+ JavaEE Server:tomcat5.0.2.8.tomcat6 IDE:eclipse.MyEclipse 8 开发依赖库: Jdk1.6.jasper-compiler.jar.jasper

部署openfire到linux环境下

1.java环境部署:具体参考 http://blog.csdn.net/gufachongyang02/article/details/45337379 2.ant环境部署: 具体参考 http://blog.csdn.net/gufachongyang02/article/details/45337379 3.git安装部署(版本库使用的是git) 在安装git时要保证已安装zlib.zlib安装步骤如下: 先下载zlib,然后输入如下命令: $tar -xvzf zlib-1.2.3.ta

OpenFire源码学习之三:在Eclipse中构建源码

源码搭建 下载地址: 地址:http://www.igniterealtime.org/downloads/source.jsp 环境准备 第1步:  在官网上在下最新源码,这里是3.8.1.解压后得到如下图所示: 第2 步: 在IDE工具上新建一个java普通工程命名openfire 第3步: 将解压后的openfire_src目录的下的所有文件源码复制到此项目下,例图所示 这里稍等片刻后,看到如下效果图: 上图中在工程上出现了错误信息报告,不用着急.原因是刚导入的项目还有些jar包没有加进来

smack 4.1.2+openfire 3.10.2i

openfire 和以往版本配置没有多大区别就不详细介绍了,网上搜会有一大堆的图解 下面主要说一下smack 4.1.2 的开发使用,在网上看了好多文章包括stackoverflow的都没有4.1以上的使用说明,同时我发现官方的一些说明好像和这个版本不对应,例如UseConnectionConfiguration#setReconnectionAllowed(boolean) to turn on/off this feature,  我查了根本没有这个方法,所以以就自己写了一些笔记,供大家参考

openfire安装配置完全教程

Java领域的IM解决方案 Java领域的即时通信的解决方案可以考虑openfire+spark+smack. Openfire是基于Jabber协议(XMPP)实现的即时通信服务器端,最新版本是3.8.1 可以到http://www.igniterealtime.org/downloads/index.jsp下载(分为windows和linux版本) 可以到http://www.igniterealtime.org/downloads/source.jsp下载源码,方便二次开发插件. Spar

openfire调试环境

导入工程: File->New->project: 选择"Java project from existing ant buildfile" 再从菜单windows->show view->ant 打开ant工具对话框 打开ant编译文件build.xml 当编译完成后,在源码根目录下会生成一个target目录 选择run选项点运行 现在设置eclipse来调试openfire: 点击openfire项目,在菜单栏中选择Run->Open Debug Di

用smack+openfire做即时通讯

首发:个人博客 必须说明:smack最新的4.1.1,相对之前版本变化很大,而且资料缺乏,官方文档也不好,所以还是用老版本3.2.2吧.这篇博文中的代码是4.1.1版的,但不推荐用它.用openfire做服务器,用spark做帮助调试的客户端,用smack(官方文档在这里,感觉写得非常不好)做java的库,来完成即时通讯功能. 1.安装openfire在官网下载安装即可. 2.安装spark在官网下载安装即可. 3.maven引入smack <dependency>