`

openfire开发文档

    博客分类:
  • IM
阅读更多

openfire开发文档
版本:Openfire3.5.

摘自:IM即时通讯研究

    目  

一、初始工作···············

1 、安装 jdk1.5

2 、安装 eclipse,myeclipse

3 、安装 oracle10gXE

4 、安装 openfire3.5.1 源代码

二、环境配置···············

1 、配置 java 环境

2 、配置 openfire 运行环境

三、代码研究···············


第一章:初始工作

1.1 安装 jdk1.5

方法1:放在F盘的安装程序的java开发工具文件夹里

    方法2:可从www.sun.com.cn下载jdk1.5.

1.2 安装 eclipse3.3,myeclipse6.0

     放在F盘的安装程序的java开发工具文件夹里

1.3 安装 oracle10gXE

     放在F盘的安装程序的java开发工具文件夹里

1.4 安装 openfire3.5.1 源代码

        源代码的下载

方法1:放在F盘的openfire文件夹里

方法2:可从openfire的官方网站下载,网址在IE的收藏夹里

②源代码的安装

将下载好的 openfire 源代码解压出来,复制到 eclipse workspace 里, 打开eclipse,点新建java工程,在Contents里选择第二个,即Create project from existing source, Directory选项里点右边的Browse按钮,选择eclipseworkspace里的openfire文件夹(这个文件夹的名字应该叫:openfire_src),点确定。再填入Project name,工程名字一定要和eclipseworkspace里的openfire源代码的文件夹名字相同,如下图所示:

点击完成,即成功导入openfire源代码到eclipse中。如下图所示:

右击工程,点属性->Java Build Path ->Libraries加入所对应的测试jar包,叫test什么什么的,放在E盘里。点击完成,即可将错误消除。

第二章:环境配置

2.1 、配置 java 环境

    我的电脑点右键,选择“属性”。

选择“高级”标签。

进入环境变量设置:

分别设置如下三个环境变量:
PATH=C:"jdk1.6.0"bin
CLASSPATH=.;%JAVA_HOME%"lib"tools.jar;%JAVA_HOME%"lib"dt.jar(注意,CLASSPATH最前面是有个“.”的,表示当前目录)
JAVA_HOME=C:"jdk1.6.0

设置完成之后,我们来测试一下。开始-》运行,输入“CMD”,回车。

在打开的DOS命令窗口中输入“java -version”,回车。

如果能像上图那样显示JDK的版本,说明“PATH”变量设置没有问题,如果有问题,检查PATH变量设置,输入“echo %PATH%”。

看其中是否存在“C:"jdk1.6.0"bin”。如果不存在则返回到环境变量设置中检查。

接下来我们编写一个简单的Java程序测试CLASSPATH是否设置正确。

打开记事本,输入下面的内容,保存至C:"java目录下,文件名为HelloWorld.java。(注意大小写)

class HelloWorld{
public static void main(String[] arg){
System.out.println("HelloWorld");
}
}

在打开的DOS命令窗口,进入C:"java,输入“java HelloWorld.java”,回车。

这时在C:"java目录下多了一个“HelloWorld.class”的文件。

在打开DOS命令窗口,输入“java HelloWorld”,回车。

如果程序没错,那么将输出“HelloWorld”。

恭喜,你的Java环境配置成功了。

2.2 、配置 openfire 运行环境

     点击运行按钮旁边的小的黑色三角,点击Open Run Dialog…

出现如下窗口,双击Java Application,Name框里的名字改成:openfire_src3.5.1,点击Main class右边的Search按钮,

 

 

出现如下窗口:

在第一个文本框里输入server,在第二个框里选择ServerStarter-org.jivesoftware.openfire.starter,点OK

 

点击eclipse菜单Window->Show View->Ant,如图:

 

ant窗口里右击选择Add Buildfiles…,如下图所示:

 

出现如下窗口:选择:openfire_src->build->build.xml,点击OK按钮。

 

双击在ant窗口里生成的菜单,即开始部署项目。

 

察看console里显示的信息:如果显示BUILD SUCCESSFUL就表示项目部署成功。如图:

  第三章:代码研究


Openfire socket 网络连接包括:

1. 服务器和服务器之间的连接(监听在端口 5269

2. 外部组件和服务器之间的连接(监听在端口 5275

3. 多元 (complex) 连接(监听在端口 5269

4.客户端和服务器的连接(监听在端口5222)

5.和客户端通过TLS/SSL3.0和服务器的连接。(监听在端口5223)

这些连接都是通过ConnectionManager接口实现管理的,程序中对ConnectionManager接口的实现类是 ConnectionManagerImpl,它是作为一个模块(Module)类加载到服务器中的。


下面分析的是客户端和服务器的连接。 

ConnectionManagerImpl 中是通过调用 startClientListeners 方法来初始化和开始端口监听的。

Mina框架 

startClientListeners 方法使用的是 Apache Mina 框架来实现网络连接的, Mina 框架的模式如下:

IoFilter

 IoFilter MINA 的功能扩展提供了接口。它拦截所有的 IO 事件进行事件的预处理和后处理。它与 Servlet 中的 filter 机制十分相似。多个 IoFilter 存放在 IoFilterChain

 IoFilter 能够实现以下功能:数据转换,事件日志,性能检测

Openfire 中主要用 filter 这种机制来进行数据转换。

Protocol Codec Factory

Protocol Codec Factory 提供了方便的 Protocol 支持,通过它的 Encoder Decoder ,可以方便的扩展并支持各种基于 Socket 的网络协议,比如 HTTP 服务器、 FTP 服务器、 Telnet 服务器等等。

要实现自己的编码 / 解码器 (codec) 只需要实现 interface: ProtocolCodecFactory 即可,在 Openfire 中实现 ProtocolCodecFactory 的类为 XMPPCodecFactory

IoHandler :

MINA 中,所有的业务逻辑都有实现了 IoHandler class 完成      ,当事件发生时,将触发 IoHandler 中的方法 :

sessionCreated

sessionOpened

sessionClosed

sessionIdle

exceptionCaught

messageReceived

messageSent

Openfire 中客户端和服务器连接的 IoHandler 实现类是 ClientConnectionHandler ,它是从 ConnectionHandler 中继承来的。

startClientListeners 方法首先为 Mian 框架设置线程池,再将一个由 XMPPCodecFactory 作为 Protocol Codec Factory Filter 放入到 FilterChain 中, 然后绑定到端口 5222 ,并将 ClientConnectionHandler 作为 IoHandler 对数据进行处理。完成这些步骤后 Openfire 就在 5222 等待客户端的连接。

客户端连接的处理过程:

 当有客户端进行连接时根据 Mina 框架的模式首先调用的是 sessionOpened 方法。

sessionOpened 首先为此新连接构造了一个 parser XMLLightWeightParser ),这个 parser 是专门给 XMPPDecoder (是 XMPPCodecFactory 的解码器类) 使用的,再创建一个 Openfire Connection 类实例 connection 和一个 StanzaHandler 的实例。最后将以上的 parser, connection StanzaHandler 的实例存放在 Mina session 中,以便以后使用。

当有数据发送过来时, Mina 框架会调用 messageReceived 方法

messageReceived 首先从 Mina session 中得到在 sessionOpened 方法中创建的 StanzaHandler 实例 handler ,然后从 parsers 中得到一个 parser (如果 parsers 中没有可以创建一个新的实例)(注意这个 parser 和在 sessionOpened 方法中创建的 parser 不同,这个 parser 是用来处理 Stanza 的,而在 sessionOpened 方法中创建的 parser 是在 filter 中用来解码的,一句话说就是在 sessionOpened 方法中创建的 parser 是更低一层的 parser )。最后将 xml 数据包交给 StanzaHander 的实例 hander 进行处理。

StanzaHander的实例hander处理xml数据包的过程

StanzaHander 首先判断 xml 数据包的类型, . 如果数据包以“ <stream:stream ”打头那么说明客户端刚刚连接,需要初始化通信(符合 XMPP 协议) Openfire 首先为此客户端建立一个与客户端 JID 相关的 ClientSession ,而后与客户端交互协商例如是否使用 SSL ,是否使用压缩等问题。当协商完成之后进入正常通信阶段,则可以将 xml 数据包交给这个用户的 ClientSession 进行派送( deliever ),经过派送数据包可以发送给 PacketRouteImpl 模块进行处理。

----------------------------------------------------------------------------------------------------------------------------------------------------

 结点类包

       起点    org.jivesoftware.openfire.starter.ServerStarter

       服务器  org.jivesoftware.openfire.XMPPServer

       用户验证包 里面有AuthProvier接口、几个实现类。。。

               org.jivesoftware.openfire.auth

       用户   org.jivesoftware.openfire.user

       组     org.jivesoftware.openfire.group

       好友列表org.jivesoftware.openfire.roster

      开发插件会用到的接口和包

          org.jivesoftware.openfire.container.Plugins

          org.xmpp.component.Component

          org.jivesoftware.openfire.event
          org.jivesoftware.openfire.handler

      拦截器

          org.jivesoftware.openfire.interceptor

分享到:
评论

相关推荐

    openfire开发文档[汇编].pdf

    openfire开发文档[汇编].pdf

    openfire开发文档.pdf

    Openfire 开发文档概述 Openfire 是一个开源的即时通讯(Instant Messaging, IM)服务器,它基于 XMPP(Extensible Messaging and Presence Protocol)协议,提供高效且可扩展的实时通信服务。这篇开发文档主要面向...

    openfire学习文档

    该文档是我精心总结openfire的部署、运行、压测等一些问题及心得;

    OpenFire开发指南

    在使用过程中遇到问题,可以查看OpenFire的官方文档、社区论坛或者搜索引擎获取帮助。常见的问题包括连接失败、证书错误、性能问题等,通常通过检查配置、日志和网络状态可以找到解决办法。 总的来说,OpenFire...

    openfire详细开发文档

    这款服务器的开发文档是开发者深入理解Openfire、进行定制化开发或集成到现有系统中的重要参考资料。Javadoc是Java编程语言中用于生成API文档的工具,它通过解析源代码注释来生成HTML格式的文档,方便程序员了解类库...

    openfire开发环境所需jar包.zip

    以下是标题和描述中提到的四个关键jar包及其在Openfire开发中的作用: 1. **coherence.jar**: Oracle Coherence是一款数据网格产品,它提供了一种高效的数据共享和缓存机制。在Openfire中,Coherence可能用于集群...

    openfire插件开发环境搭建

    接下来,我们将详细讲解如何搭建Openfire开发环境: 1. **安装Openfire**:访问Openfire官方网站(https://www.igniterealtime.org/projects/openfire/)下载最新版本的安装包,根据操作系统选择对应的版本。安装过程...

    openfire Java客户端开发文档详解

    Openfire是一款开源、基于Java的即时通讯(IM)服务器,它实现了XMPP协议,为企业和开发者提供了构建实时协作应用的基础。...`javadoc`文件则为开发者提供了详细的API文档,是深入研究Openfire开发的重要参考资料。

    openfire二次开发问题分析及解决

    ### Openfire二次开发问题分析及解决 #### 一、引言 随着计算机技术的迅猛发展,开源软件的二次开发利用逐渐成为进行快速开发的主要手段。Openfire作为一款优秀的开源XMPP服务器软件,因其卓越的性能和良好的可...

    IM(Spark+Smack+Openfire)开发资料详细说明文档

    本文档详细介绍了基于Spark、Smack和Openfire构建IM系统的开发过程和关键知识点,旨在帮助开发者更好地理解和实践。 1. **Spark**: Spark是一款开源的Web即时通讯客户端,支持多种平台,包括Windows、Linux和Mac ...

    Openfire开发资料

    本文将围绕“Openfire开发资料”这一主题,深入探讨Openfire的编译、打包、开发过程,以及插件开发与系统原理,并结合提供的文档和资源进行详细解读。 一、Openfire编译 Openfire的源代码采用Java语言编写,通过...

    OpenFire二次开发环境搭建

    ### OpenFire二次开发环境搭建详解 #### 一、概述 OpenFire是一款开源的企业级即时通讯服务器,基于XMPP协议标准,适用于多种应用场景。对于开发者来说,掌握如何搭建OpenFire的二次开发环境至关重要,这不仅有助...

    openfire 聊天记录开发源码 ,包括说明文档,一步一步跟我走绝对能搞定

    5. **文档阅读与理解**:提供的"openfire聊天记录开发.docx"文档将详细指导开发者进行上述操作,从安装Openfire环境,到编写代码实现特定功能,再到测试和部署,一步步讲解,确保开发者能够顺利进行开发。...

    Openfire+Spark文档整理

    5. **spark+openfire二次开发系列**:这些文档可能是系列教程,详细介绍了如何利用Spark和Openfire进行二次开发,如扩展功能或创建自定义插件。 6. **openfire3_7插件开发方法.mht**:针对Openfire 3.7版本,讲解了...

    openfire二次开发

    Openfire二次开发是一个深入理解并定制开源即时通讯服务器Openfire的过程。Openfire是一款基于XMPP协议的实时协作服务器,它提供了强大的聊天、会议和文件传输功能。本资料旨在指导开发者如何进行Openfire的定制和...

    openfire的相关资源

    如果你计划对Openfire进行二次开发或深入理解其工作原理,那么阅读"编译和运行openfire记录 - wletv的专栏 - 博客频道 - CSDN.NET.htm"和"Openfire开发配置, 二次开发配置 - 俊辑的地盘 - 博客频道 - CSDN.NET.htm"...

Global site tag (gtag.js) - Google Analytics