`
- 浏览:
335014 次
- 性别:
- 来自:
深圳
-
PS: 该文档是收录的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保存为离线消息。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
相关类说明 主要使用的类 功能介绍 很适合初学者观看
在Openfire中,插件是扩展其功能的关键方式。本教程将引导初学者了解如何开发第一个Openfire插件,从而深入理解Openfire的架构和插件开发流程。 1. **Openfire插件体系结构** Openfire插件是Java编写的独立模块,...
在Openfire中,可以创建一个公告类的实体,通过插件实现公告的创建、更新和分发,同时在Android客户端上展示。 7. **实时推送**:为了实现即时的消息通知,Android客户端需要集成GCM(Google Cloud Messaging)或...
3. **运行配置**:在新建的项目上,选择Run As → Open Run Dialog,创建Java Application的启动配置,选择ServerStarter类作为Main class,并在VM arguments中指定`-DopenfireHome`参数,指向Openfire的工作目录。...
首先,文档详细说明了进行Openfire开发所需的初始准备工作,包括安装Java开发工具包(JDK)、集成开发环境(Eclipse/MyEclipse)、数据库(Oracle 10gXE)以及Openfire服务器软件。在安装JDK时,文档提供了两种方法...
6. Openfire中的类命名规则通常包括Starter、Plugin、Listener、Dispatcher、Handler、Manager、Provider等后缀,这些命名有助于快速识别和理解类的职责和功能。 通过这些知识点的梳理,可以更深入地理解Openfire的...
- **步骤说明**:首先需要将OpenFire项目导入到开发环境中。通常情况下,开发者会选择使用Eclipse或者IntelliJ IDEA等IDE来进行开发工作。 - **操作指南**:可以通过Git或者其他版本控制系统克隆OpenFire的源代码...
在使用Openfire的过程中,可能会遇到一些问题,比如“openfire4.1.3缺少的jar包”这样的错误提示,这通常是由于安装或运行时环境不完整导致的。为了解决这个问题,我们需要深入理解Openfire的依赖结构以及如何正确...
7. **Javadoc**:提供的Javadoc文件是API的详细文档,包含了每个类、接口、方法的说明,以及示例代码,对于学习和使用Openfire API非常有帮助。 通过阅读和理解Openfire 3.8.2 API的Javadoc,开发者可以学习如何...
在将Openfire项目导入Eclipse开发环境中时,可能会遇到缺少必需JAR库的问题,导致编译或运行失败。本文将详细介绍解决"openfire部署到eclipse少的3个jar包"这个问题的相关知识点。 首先,我们需要理解Java类库(JAR...
具体来说,Openfire中的`ConnectionHandler`类继承自MINA的`IoHandlerAdapter`类,负责客户端连接的创建与销毁,以及XML数据包的传递。此外,Openfire还根据连接类型的不同,进一步细分为`ClientConnectionHandler`...
在Main选项卡中选择`ServerStarter`类,然后在Arguments选项卡的VM arguments中填入`-DopenfireHome="${workspace_loc:openfire_src}/target"`,这样Eclipse就知道Openfire的启动目录。 完成以上步骤后,你就可以在...
在"openfire3.8.1API"中,我们可以找到以下关键知识点: 1. **XMPP协议**:XMPP(Extensible Messaging and Presence Protocol,可扩展消息传递和存在协议)是基于XML的开放标准,用于即时通讯和在线状态。Openfire...
以下是对 Openfire 服务端在 Linux 上的实现及其相关开发的详细说明: 1. **Linux 服务器上的 Openfire 安装** - 首先,确保你的 Linux 服务器满足 Openfire 的系统需求,通常需要Java运行环境(JRE)和Java开发...
文档中提到了WinXP操作系统,说明开发环境可以运行在Windows平台。MyEclipse 6.5是一种开发Java、J2EE及Web应用程序的集成开发环境,它为开发者提供了一系列的工具和插件,比如代码编辑、调试、数据库连接、版本控制...
开发者在构建项目时,需要把这些库添加到项目的类路径中,以便在代码中导入并使用Smack的相关类。 Smack_4_1_8的更新可能包括对XMPP协议的最新支持、性能提升、错误修复、新的API或者对旧API的改进。例如,可能增加...
5. **运行与测试**:在MyEclipse中部署Openfire项目,启动服务器后,访问任意页面,如果页面被正确装饰,说明Sitemesh已经成功集成。 在提供的`demo`文件中,可能包含了具体的装饰模板、Openfire的配置示例以及部署...
3. **连接与认证**:详细说明如何连接到Openfire服务器,进行用户身份验证,以及处理连接状态的变化。这部分通常涉及XMPPTCPConnection类的使用,以及SASL(Simple Authentication and Security Layer)认证机制。 ...
在Smack中,这些实体由`XMPPAddress`表示,它是一个类,包含了JID( Jabber Identifier),即XMPP的唯一标识符。 3. **用户身份验证**:通过`SASLAuthentication`类,Smack支持多种安全认证机制,如PLAIN、DIGEST-...