openfire 源码分析

  1. 编译目录
    • source folder:包括openfire和各插件的代码

    • libraries:build/lib下jar包和插件下jar包,jdk/lib/tools.jar(编译jsp需要)

  2. 编译(ant)
    • 编译文件目录:build/build.xml
    • plugins:构建所有的插件

  3. 启动服务器:org.jivesoftware.openfire.starter.ServerStarter
    • classpath: src/i18n:国际化文本。 src/resources/jar:MIME类型和Console配置文件
    • ServerStarter:更新ClassLoader,将lib加进来,实例化唯一的XMPPServer

    • XMPPServer:
      初始化:定openfirehome目录,JiveGlobals类读取openfire.xml文件,JIveProperties读取数据表ofProperty中的配置参数,PluginManager初始化所有插件

  4. 运行
    • RoutingTableImpl:消息路由,所有的消息都要经过它来发送

    • RosterManager:好友资料管理类

    • PresenceManagerImpl、PresenceUpdateHandler:所有用户状态的管理类

    • SessionManager:所有会话的管理类

    • PacketRouterImpl:消息路由,所有消息都要经过它来获取

    • MulticastRouter:广播路由,专门负责路由广播类消息

    • OfflineMessageStrategy:离线消息策略类,就是使用哪种方式来保存离线的消息

    • OfflineMessageStore:负责离线消息的存储

    • IQHandler:专门处理IQ类消息

    • IQBindHandler:负责处理客户端的资源的绑定

    • IQAuthHandler:负责登录请求

    • IQPingHandler:负责客户端ping处理

    • DefaultFileTransferManager:负责文件传送的类

    • MultiUserChatManager:负责群聊的类

    • ConnectionManagerImpl:负责连接的类

    • MessageRouter:负责message消息类型的处理类
    • UserManager:负责用户的管理类

    • JDBCAuthProvider:负责登录校验的类
    • DefaultUserProvider:默认用户的数据库操作类
    • JDBCUserProvider:JDBC连接类型的用户数据操作类

具体的消息处理流程,可以查看我的一篇博客:http://www.cua0702.com/?p=134

posted @ 2015-07-21 15:25  cua0702  阅读(486)  评论(0)    收藏  举报