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

数据库

相关文章
相关标签/搜索