分享

openfire原理和源码分析

 昵称13027170 2016-12-21

                 

     1.  Openfire它是基于公开协议XMPP(也成为Jabber)消息的开源的实时协作服务器。 核心功能可以概括为:连接管理、消息解析、消息路由、消息发送。   

         详细链接 Openfire源码分析:http://www.360doc.com/content/13/0601/17/1542811_289727966.shtml    . 

                          openfire介绍 : http://baike.soso.com/v45786792.htm

    

     2.openfire 服务器启动流程

             1.启动时开始:调用ServerStarter类中的start()方法,通过反射加载org.jivesoftware.openfire.XMPPServer类文件,创建实例时调用其构造函数,在其构造函数中调用其start()方法实际启动服务应用程序。

           

             2.XMPPServer类Start()方法中:首先调用verifyDataSource()方法验证并确保数据库可以访问。

            

             3. 调用loadModules();initModules();startModules();方法来对Module接口的实现类的各子类进行操作,依次完成模块的加载、初始化和启动操作。

             

             4.loadModules()方法中:调用loadModule(String module)方法通过反射加载各模块类,参数字符串module为对应的模块核心处理类的类名,如AdHocCommandHandler。

        以AdHocCommandHandler为例对接下来的处理流程进行说明。通过loadModule创建AdHocCommandHandler类实例时调用其构造函数,在构造函数中初始化了其私有AdHocCommandManager对象。在initModules()时调用AdHocCommandHandler实例的initialize(XMPPServer server)方法对其私有属性对象进行初始化。然后调用start()方法,调用addDefaultCommands方法添加命令并启动命令(通过调用startCommand(AdHocCommand command)方法实现)。

        如:

            加载:

             ClassLoader loader = new JiveClassLoader(parent, libDir);

             loader导入:

             Thread.currentThread().setContextClassLoader(loader);
             Class containerClass = loader.loadClass("org.jivesoftware.openfire.XMPPServer");

            进入org.jivesoftware.openfire.XMPPServer类:
            containerClass.newInstance();

              

       3.openfire 服务器网络处理

               1.消息监听服务 :SSL等监听服务的调度在ConnectionManagerImpl类中实现。ConnectionManagerImpl.createClientSSLListeners()方法启动SSL监听。

 

                2.三个消息封装包:信息处理采用XML节的方式传递信息,消息封装通常采用IQ、Message、Presence。

 

       4.openfire  服务器数据库处理

              1.Openfire的数据库处理采用直接调用JDBC 的方式。核心类为org.jivesoftware.database.DbConnectionManager。数据库的处理与业务处理耦合,没有划分出专门的业务逻辑层。

             

              2.常用类: org.jivesoftware.database.DbConnectionManager 连接管理类 , org.jivesoftware.util.JiveGlobals 通常用于操作ofproperty表中记录。

          详细链接:http://buerkai./blog/1830823 。

      

        5. openfire web服务器

              1. Openfire采用内置的jetty作web服务器,在启动AdminConsolePlugin插件时调用startup()方法启动jetty服务器,9090为其明文端口,9091为其加密端口。

               JETTY服务器介绍:http://www./Linux/2011-12/48677.htm

        6.openfire 页面处理

              1. Openfire没有采用现在很流行的技术架构(SSH),只使用JSP+JavaBean,但是它有自己的系统设计,就连日志都是自己做的,没有使用我们熟悉的log4j。

               JSP+JAVABEAN 介绍:http://blog.csdn.net/zengshuqin/article/details/5874229

 

       7. openfire插件

 

       8.openfire服务器配置

              Openfire的系统配置项采用文件结合数据库表的方式配置,也有部分默认配置项通过Java硬编码方式配置(如org.jivesoftware.openfire. ConnectionManager接口类中定义的DEFAULT_PORT、DEFAULT_SSL_PORT、DEFAULT_COMPONENT_PORT等),Openfire中比较重要的配置位置包括。

             1. src/conf目录下的openfire.xml配置文件。该配置文件为系统核心配置文件。在第一次启动Openfire并通过管理控制台完成安装配置后会往该配置文件中填入相应的配置信息。

           

            2.plugin.xml配置文件。该配置文件为各插件包下的核心配置文件,由它确定插件核心处理类和相应页面插件的展现等。配置项及含义详见官方插件开发说明部分 。     

 

            3.web.xml和web-custom.xml配置文件。用于配置servlet和用户自定义servlet(插件页面用,放在插件对应目录下)。

 

            4.ofproperty中的各条记录,该表中包括两个字段name和propvalue,分别代表配置项名和配置项值。

 

        9.openfire客户端到服务器的链接处理

             用MINA框架中的IoHandler这个接口,IoHandler是最终面对用户的接口。

             MINA工作原理链接: http://wenku.baidu.com/link?url=6Mrdu1qQKSW6dtFZouOMNjcScMub6i0Q0k7a2CuBmrQDVYhuiAxuHOlYY40oLzWKT-z_xHli2DkVzNY3qFwLpoRhk-AKTYviLPyHWa3f9Fu

详细链接 http://blog.csdn.net/heyi1214/article/details/4242865

   

 

 

       具体openfire介绍 : http://baike.soso.com/v45786792.htm  http://buerkai./。(对着源码看更好)。

 

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章