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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值