转载:http://hi.baidu.com/zhaojinwei1986/blog/item/fe3b9f12d5784e24dd5401db.html

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流。
  4、举个例子看看所谓的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连接。
  采用XMPP协议的即时通信应用,当数google吧,Google Talk是基于XMPP协议,而且它还允许其它IM自由使用XMPP协议。如此一来,任何IM供应商在遵循XMPP协议的前提下,都可以随时与Google Talk实现免费连接.
  附:主流的四种IM通讯协议简介
  IMPP:IMPP主要定义必要的协议和数据格式,用来构建一个具有空间接收、发布能力的即时信息系统。到目前为止,这个组织已经出版了三个草案RFC,但主要的有两个:一个是针对站点空间和即时通讯模型的(RFC 2778);另一个是针对即时通讯/空间协议需求条件的(RFC2779)。RFC2778是一个资料性质的草案,定义了所有presence和IM服务的原理。RFC2779定义了IMPP的最小需求条件。另外,这个草案还就presence服务定义了一些条款,如运行的命令、信息的格式,以及 presence服务器如何把presence的状态变化通知给客户。
  SIMPLE:SIMPLE是目前为止制定的较为完善的一个。SIMPLE和XMPP两个协议,都符合RFC2778和RFC2779 。SIMPLE计划利用SIP来发送presence信息。SIP是IETF中为终端制定的协议。SIP一般考虑用在建立语音通话中,一旦连接以后,依靠如实时协议(RTP)来进行实际上的语音发送。但SIP不仅仅能被用在语音中,也可以用于视频。SIMPLE被定义为建立一个IM进程的方法。 SIMPLE在2002年夏季得到额外的信任,目前,微软和IBM都致力于在它们的即时通讯系统中实现这个协议。 SIMPLE小组致力于进程模式的操作,这将提升运行效率,使基于SIP的机制能够进行会议和三方电话交谈控制,也考虑到能和未来提供的许多新特性实现兼容并提升表现能力。有了进程模式,SIMPLE使用SIP来建立一次进程,再利用SDP(进程描述协议)来实际传输IM数据。

主流的四种IM(IM:instant messaging,即时消息)协议相关推荐

  1. 身在天津的宝妈有福了,2021四种飞速涨粉方法第一手消息。

    身在天津的宝妈有福了,2021四种飞速涨粉方法第一手消息. 在dy短视频如果你的粉丝不到1000就不要想着赚钱了.因为dy短视频一千粉是很多福利的门槛. 所以今天就教天津的你四种快速涨到一千粉的方法, ...

  2. spi四种工作模式时序图_SPI总线协议及SPI时序图详解

    嵌入式linux QQ交流群:175159209,欢迎爱好者加入交流技术问题! SPI,是英语Serial Peripheral Interface的缩写,顾名思义就是串行外围设备接口.SPI,是一种 ...

  3. IM --- Instant Messaging 即时通讯(环信IM云)

    1 环信IM云 准备工作 : 1). 注册环信IM账户 2). 创建IM应用 2.架构 接口测试 : 3. 用户微服务 tensquare_user : 统一管理十次方系统中的用户信息 ; 1). p ...

  4. python主要就业方向-四种Python高薪就业方向

    前言: Python使用范围很广泛,一个人精力有限,不可能精通所有的领域.就拿Python官网的Python应用领域来说,Python有以下几个方面的应用: Web Programming:Djang ...

  5. js 复制文本的四种方式

    一.总结 一句话总结:js文本复制主流方法:document的execCommand方法 二.js 复制文本的四种方式 纯 转载复制,非原创 原地址:http://www.cnblogs.com/xh ...

  6. 四种方式搭建文件服务器

    最近做工程,文件存储.图片存储没有一个统一的管理方式,很不爽. 准备搭建个文件服务器来玩玩,百度了一圈,找到了主流的四种搭建服务器的方式,并且把它部署到了我的阿里云服务器上. 四种搭建文件服务器的方式 ...

  7. Post请求的四种方式

    Post请求四种传送方式的Python实现 HTTP 协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式.常见的四种编码方式如下: ♦ ...

  8. 【美联储圣路易斯分行在其研究数据库中追踪四种数字货币价格】

    gbcax链交所 [美联储圣路易斯分行在其研究数据库中追踪四种数字货币价格] 据coindesk消息,美国联邦储备银行圣路易斯分行正在其研究数据库Federal Reserve Economic Da ...

  9. 知道接口地址 如何传数据_如何选显示器连接线?四种主流接口要知道

    前两天家里电脑显示器的线坏了,火急火燎的买了根线,谁知道买回来之后接口不匹配,不能用.显示器为什么要有这么多接口呢?这些接口又有什么区别呢?必须把它搞清楚!这不,经过我的不屑努力,终于搞明白了,马不停 ...

最新文章

  1. urlrewrite使用小结
  2. R语言可视化分别使用lattice包和ggplot2包可视化热图(heatmap)并绘制热力图对应的系统树图(dendrogram)实战
  3. ACL 2020今日放榜,779篇论文被接收,姚班校友陈丹琦首日演讲
  4. Java:包的使用Pack
  5. 卸载sharepoint2013
  6. 这样用组图创作内容,能让你的文章被转发
  7. Spring Boot - 自动配置实现原理
  8. 【Linux】19.Linux环境变量名LD_LIBRARY_PATH 和 ldd命令详解
  9. 印象笔记无法连服务器(internet explore的问题)
  10. HashMap 源码解析(JDK1.8)
  11. linux之head命令
  12. java 交替_Java 8:使用交替接口公开的类型安全地图生成器
  13. 如何成功构建大规模 Web 搜索引擎架构?
  14. pcl求平面法向量_PCL1.8.1 点的法向量
  15. CCF NOI1016 计算天数
  16. 【二分答案】【中位数】codeforces 394 bun
  17. mcisendString制作播放器
  18. easyUI的iconCls
  19. 随机存储器与只读存储器
  20. Ubuntu大于2T硬盘,分区并挂载

热门文章

  1. 5种比较流行的Linux发行版及其各自特点
  2. group by 后面 order by 失效问题
  3. 什么是平台化?平台化是如何发展的?
  4. keil与仿真电路的学习(一)
  5. 元音音频时域频域特点 RGB文件三通道熵计算
  6. 计算机主机硬盘主要有,常见的硬盘故障都有哪些
  7. Extjs grid只能显示一条数据的问题
  8. 安卓手机如何投屏到电视上_【新世纪教育】手机如何投屏到电视安卓和iOS通用!...
  9. mtk-drm初始化
  10. 佳博 GP-L80180 USB ESCPOS VC 开发