openfire及xmpp简单介绍

一、oprenfire

  1、openfire是采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议。可以使用它轻易的构建高效率的即时通信服务器。

  2、Openfire安装和使用都非常简单,并利用Web进行管理。单台服务器可支持上万并发用户。

  3、由于是采用开放的XMPP协议,可以使用各种支持XMPP协议的IM客户端软件登陆服务。

二、XMPP(Jabber)协议

  1介绍

    XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程 序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。

  2、定义

    XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。 

    XMPP的前身是Jabber, 一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分; 

    核心的XML流传输协议 

    基于XML FreeEIM流传输的即时通讯扩展应用 

    XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。 

    XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。 

    在IETF 中,把IM协议划分为四种协议,即时信息和出席协议(Instant Messaging and Presence Protocol, IMPP)、出席和即时信息协议(Presence and Instant Messaging Protocol, PRIM)、针对即时信息和出席扩展的会话发起协议(Session Initiation Protocol for Instant Messaging and Presence Leveraging Extensions, SIMPLE),以及可扩展的消息出席协议(XMPP)。最初研发IMPP 也是为了创建一种标准化的协议,但是今天,IMPP 已经发展成为基本协议单元,定义所有即时通信协议应该支持的核心功能集。

  3、 XMPP协议的优点

    a. XMPP 协议是公开的,由JSF开源社区组织开发的。

    b. XMPP 协议具有良好的扩展性。

    c. 分布式的网络架构。

    d. XMPP 具有很好的弹性。

    e. 安全性。

  4、XMPP协议网络架构

    XMPP是一个典型的C/S架构,而不是像大多数即时通讯软件一样,使用P2P客户端到客户端的架构,也就是说在大多数情况下,当两个客户端进行通讯时,他们的消息都是通过服务器传递的(也有例外,例如在两个客户端传输文件时).采用这种架构,主要是为了简化客户端,将大多数工作放在服务器端进行,这样,客户端的工作就比较简单,而且,当增加功能时,多数是在服务器端进行.XMPP服务的框架结构如下图所示.XMPP中定义了三个角色,XMPP客户端,XMPP服务器、网关.通信能够在这三者的任意两个之间双向发生.服务器同时承担了客户端信息记录、连接管理和信息的路由功能.网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信)、MSN、ICQ等.基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML,工作原理是: 

    (1) ?点连接到服务器; 

    (2) 服务器利用本地目录系统中的证书对其认证; 

    (3) ?点指定目标地址,让服务器告知目标状态; 

    (4) 服务器查找、连接并进行相互认证; 

    (5) ?点之间进行交互;

  5、 XMPP消息格式

    XMPP中定义了3个顶层XML元素: Message、Presence、IQ,下面针对这三种元素进行介绍。

    <Message>

    用于在两个jabber用户之间发送信息。Jsm(jabber会话管理器)负责满足所有的消息,不管目标用户的状态如何。如果用户在线jsm立即提交;否则jsm就存储。

    To : 标识消息的接收方。

    from : 指发送方的名字或标示(id)

    Text: 此元素包含了要提交给目标用户的信息。

    结构如下所示:

    <message to= ‘lily@jabber.org/contact’ type =’chat’>

    <body> 你好,在忙吗</body>

    </message>

    <Presence>

    用来表明用户的状态,如:online、away、dnd(请勿打扰)等。当用户离线或改变自己的状态时,就会在stream的上下文中插入一个Presence元素,来表明自身的状态.结构如下所示:

    <presence>

    From =‘lily @ jabber.com/contact’

    To = ‘yaoman @ jabber.com/contact'

    <status> Online </status>

    </presence>

    <presence>元素可以取下面几种值:

    Probe: 用于向接受消息方法发送特殊的请求

    subscribe: 当接受方状态改变时,自动向发送方发送presence信息。

    < IQ >

    一种请求/响应机制,从一个实体从发送请求,另外一个实体接受请求,并进行响应.例如,client在stream的上下文中插入一个元素,向Server请求得到自己的好友列表,Server返回一个,里面是请求的结果.

    <iq > 主要的属性是type。包括:

    Get :获取当前域值。

    Set :设置或替换get查询的值。

    Result :说明成功的响应了先前的查询。

    Error: 查询和响应中出现的错误。

    结构如下所示:

    <iq from =‘lily @ jabber.com/contact’id=’1364564666’ Type=’result’>

 

详情参见:http://www.cnblogs.com/hoojo/archive/2012/06/18/2553975.html    谢谢!

posted @ 2014-04-14 10:49  foutouren  Views(220)  Comments(0)    收藏  举报