zoukankan      html  css  js  c++  java
  • XMPP协议实现原理简介

    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协议工作原理:

     

    4. XMPP协议地址格式:

     

     

    5. XMPP消息格式: 

     

     

     

    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系统特点:

    1)客户机/服务器通信模式;(2)分布式网络;(3)简单的客户端;(4)XML的数据格式。 

    9.通俗解释:

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

    原文http://www.cnblogs.com/hanyonglu/archive/2012/03/04/2378956.html 

  • 相关阅读:
    高斯消元学习
    HDU 4596 Yet another end of the world(解一阶不定方程)
    Codeforces Round #318 div2
    HDU 4463 Outlets(一条边固定的最小生成树)
    HDU 4458 Shoot the Airplane(计算几何 判断点是否在n边形内)
    HDU 4112 Break the Chocolate(简单的数学推导)
    HDU 4111 Alice and Bob (博弈)
    POJ 2481 Cows(线段树单点更新)
    HDU 4288 Coder(STL水过)
    zoj 2563 Long Dominoes
  • 原文地址:https://www.cnblogs.com/alone-01/p/5817174.html
Copyright © 2011-2022 走看看