`
夏文权
  • 浏览: 237238 次
  • 性别: Icon_minigender_1
  • 来自: 贵州
社区版块
存档分类
最新评论

XMPP协议原理及相关信息

 
阅读更多
原创:http://www.cnblogs.com/hanyonglu/archive/2012/03/04/2378956.html
XMPP协议简介
一、XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM(IM:instant messaging,即时消息)协议之一,
其他三种分别为:即时信息和空间协议(IMPP)、空间和即时信息协议(PRIM)、针对即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)。

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

1. 什么是XMPP ?

XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分;一、 核心的XML流传输协议 。 二、 基于XML流传输的即时通讯扩展应用 。

XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上,借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。
XMPP的即时通讯扩展应用是根据IETF在这之前对即时通讯的一个抽象定义的,与其他也已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。

2. XMPP的基本网络结构是怎样的?
XMPP中定义了三个角色,客户端,服务器,网关。
通信能够在这三者的任意两个之间双向发生,服务器同时承担了客户端信息记录,连接管理和信息的路由功能。
网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。

3. XMPP通过TCP传什么了?
传输的是与即时通讯相关的指令。以前这些命令要么用2进制的形式发送(比如QQ)要么用纯文本指令加空格加参数加换行苻的方式发送(比如MSN)。而XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。这不但使得解析容易了,人也容易阅读了,更方便了开发和查错。
而XMPP的核心部分就是一个在网络上分片断发送XML的流协议。这个流协议是XMPP的即时通讯指令的传递基础,也是一个非常重要的可以被进一步利用的网络基础协议。所以可以说,XMPP用TCP传的是XML流。


XMPP协议工作原理:

1、所有从一个client到另一个client的jabber消息和数据都要通过xmpp servers。
2、client连接到servers。
3、servers利用本地目录系统的证书对其认证。
4、client定制目标地址,让servers告知目标状态。
5、servers查找,连接并进行相互认证。
6、client间进行交换。

4. XMPP协议地址格式:

1) 统一的JID(jabber identifire)
2) JID[node"@"]domain["/"resource]
比如:cyber@cybeanobject.com/res
domain :服务器的域名
node : 用户名
resource :属于用户的位置或设备

4) 一个用户可以同时以多种资源与同一个XMPP服务器连接



5. XMPP消息格式: xml消息格式的定义

xmpp xml 包括3个元素

例如:

<stram>
<presence>
<status/>
</presence>

<message>
<body/>
</message>

<iq>
<bind/>
</iq>
</stram>


说明:
presence :此元素确定用户的状态
eg:
<presence>
from=cyber1@jabber.org/contact
to=cyber2@jabber.org/contact>
<status>online</status>
</presence>

message : 用于2个用户之间发送信息
eg:
<message>
form=cyber1@jabber.org/contact
to=cyber2@jabber.org.contact
type="chat">
<body>Hello</body>
</message>

iq : 信息/请求,是一个请求-响应机制,管理xmpp服务器上2个用户的转换,
允许他们通过相应的xml格式的查询和响应
eg:
<iq>
from=cyber1@jabber.org/contact
id="id1" type="result">
</iq>

iq的主要属性:
1、type:包括 get获取当前域值
2、set:设置或替换get查询的值
3、result :说明成功的响应了先前的查询
4、error:查询和相应中出现的错误


6. 核心的XML流传输协议

基于XML FreeEIM流传输的即时通讯扩展应用
XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上,
借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。
XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,
与其他也已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。
XMPP的扩展协议Jingle使得其支持语音和视频。 
XMPP的官方文档时RFC 3920.


7. XMPP应用示例
举个例子看看所谓的XML流是什么样子的?
客户端:
<?xml version='1.0'?>
  <stream:stream
  to='example_com'
  xmlns='jabber:client'
  xmlns:stream='http_etherx_jabber_org/streams'
  version='1.0'>

  服务器:
<?xml version='1.0'?>
  <stream:stream
  from='example_com'
  id='someid'
  xmlns='jabber:client'
  xmlns:stream='http_etherx_jabber_org/streams'
  version='1.0'>
   ...其他通信...
  客户端:
<message from='juliet_example_com'
  to='romeo_example_net'
  xml:lang='en'>
  客户端:
<body>Art thou not Romeo, and a Montague?</body>
客户端:
</message>

  服务器:
<message from='romeo_example_net'
   to='juliet_example_com'
   xml:lang='en'>
  服务器:
<body>Neither, fair saint, if either thee dislike.</body>
  服务器:
</message>
  客户端:
</stream:stream>
  服务器:
</stream:stream>

以文档的观点来看,客户端或服务器发送的所有XML文本连缀在一起,从<stream>到</stream>构成了一个完整的XML文档。其中的stream标签就是所谓的XML Stream。在<stream>与</stream>中间的那些<message>...</message>这样的XML元素就是所谓的XML Stanza(XML节)。XMPP核心协议通信的基本模式就是先建立一个stream,然后协商一堆安全之类的东西,中间通信过程就是客户端发送XML Stanza,一个接一个的。服务器根据客户端发送的信息以及程序的逻辑,发送XML Stanza给客户端。但是这个过程并不是一问一答的,任何时候都有可能从一方发信给另外一方。通信的最后阶段是</stream>关闭流,关闭TCP/IP连接。


8. XMPP系统特点:

其实XMPP 是一种很类似于http协议的一种数据传输协议,它的过程就如同“解包装--〉包装”的过程,用户只需要明白它接受的类型,并理解它返回的类型,就可以很好的利用xmpp来进行数据通讯。




















 
分享到:
评论

相关推荐

    XMPP协议--即时通讯工具实现原理

    agsXMPP\XMPP协议--即时通讯工具实现原理

    XMPP协议分析-原理篇.pdf

    XMPP协议分析,xmpp是即时通讯IM中比较普遍的应用

    XMPP_协议介绍

    关于XMPP协议的说明及介绍,XMPP体系结构的组成,XMPP原理等的说明

    xmpp 协议即时通讯

    xmpp 协议即时通讯的源代码,是用vc6进行编译,知道通讯的原理

    基于XMPP协议的视频会议系统C#源码

    基于XMPP协议的即使通讯工具,包括服务端和客户端

    基于xmpp协议消息推送研究与实现.pdf

    本文详细阐述了移动互联网中三种推送技术的原理,通过对它们优缺点和使用场合的分析,探讨了通过XMPP协议保持长久连接方式实现消息推送功能的方法,并针对其实现的关键技术展开了讨论,在开源软件系统0penFi re的...

    计算机毕业设计 - XMPP研究,保证可靠运行,计算机毕业生可参考,免费资源下载

    XMPP研究项目专注于对可扩展通讯和表示协议(XMPP)进行深入的研究,旨在理解其工作原理、特性及潜在应用场景,并...通过本次XMPP研究项目,我们不仅深入了解了XMPP协议的原理和应用,还通过实际开发积累了宝贵的经验。

    基于XMPP 的即时通讯系统的设计与实现

    本文首先介绍了XMPP协议的工作原理,并且说明了其优势,然后给出了一套基于XMPP的即时通讯系统设计方案,将其部署在MySql数据库下,以java为编程语言,实现了即时通讯。经测试,本系统实时性好、使用方便、稳定性好...

    IM服务端开发文档

    XMPP协议的原理介绍 6 XMPP协议的文档 6 XMPP的基本网络结构 7 Openfire(服务端) 7 附:《Openfire源代码架构》 8 命名规则 8 系统配置项 9 系统启动流程 9 网络处理 10 Openfire消息包接受处理流程 11 数据库处理...

    XMPP Over WebSocket

    该文档详细地描述了基于WEBSOCKET以XMPP协议实现网页客户端进行及时通讯的原理,实现方法,以及现有的开发包

    im即使通讯

    现在市面上有很多 xmpp协议的即时通讯方案,openfire androidpn,等等。它们都是使用了apache mina开发,但是这些东西基本都需要二次改造开发。而且改动还很大,我也看过这些东西的源码,发现代码结构不太理想,耦合...

    细细品味架构·从零开始搭建高可用IM系统(第3期)

    2.3 基于XMPP 协议的手机通讯方案 2.3.1 开发背景 2.3.2 Xmpp 协议介绍 2.3.3 服务器端介绍 2.3.4 客户端介绍 2.3.5 环境搭建 2.3.6 安装项目 2.3.7 项目演示 2.3.8 多方、多端即时通讯 2.3.9 解决方案 2.3.10 全文...

    GitHub上最火的Android项目,所有开源项目都有详细资料和配套视频

    与XMPP相关试题 17-什么是XMPP和XMPP的数据格式 18-及时聊天的展示形式 19-TCP和UDP协议 20- 极光自适应原理 21- XMPP的基本概念 22-常见消息个体的解决方案 与登录相关试题 23-微信扫一扫登录内部实现原理 ...

    WebRTC零基础开发者教程(纯净版)

    6.1 XMPP协议 6.1.1 原理介绍 6.1.2 XMPP 协议网络架构 6.1.3 XMPP 协议的组成 6.1.4 Xmpp介绍 6.1.5 协议内容 6.2 Stun协议 6.2.1 P2P实现的原理 6.2.2 P2P的常用实现 6.2.3 Stun URI 6.2.4 内容 6.2.5 中文内容 ...

    XMPPFramework

    基于XMPP协议的简单IM实现 1、通过自己做了个小Demo来了解其原理,进攻各位初识XMPP的参考 2、服务器采用了openfire的朋友,遇到了诸如列表无法获取等问题,我没试过,会抽时间去实践下,到时候和大家一起探讨,不过...

    webqq.rar_加密 即时通讯

    基于web socket7原理,以及xmpp协议等即时通讯协议,ras base64加密算法,实现的类似qq的通讯软件

    多重服务器负载均衡新方案

    C/S网络与P2P网络 DHT技术 Chord协议原理 P2P-XMPP模型系统

    XMPP 及其在即时通信系统的文字通信 模块中的应用 (2008年)

    对Jabber/XMPP(EXtensible Messaging and Presence Protoco1)协议进行了研究,将XMPP与其他即时通信协议在工作原理等方面进行了比较,分析了XMPP的强大优势,结果表明,XMPP确实能做到不同即时通信系统间的互联互通,在此...

    深入理解Android网络编程技术详解与最佳实践(带书签目录高清完整版).陈文.郭依正.pdf

    Fi、Bluetooth、NFC等网络模块的编程,讨论了Android中线程、数据存取、消息缓存、界面更新等的处理方法,探讨了SIP、XMPP等协议在Android上的应用;源码分析篇(第9~11章)分析了Android中与HTML处理、网络处理以及...

Global site tag (gtag.js) - Google Analytics