XMPP协议实现原理介绍

最近一直想研究推送协议,接下来老于就带你一起走进XMPP协议的研究。

关于服务器端向Android客户端的推送,主要有三种方式:
1.客户端定时去服务端取或者保持一个长Socket,从本质讲这个不叫推送,这是去服务端拽数据。但是实现简单,主要缺点:耗电等
2.Google的C2DM,具体不细说,缺点,服务器在国外,你懂得,不是很稳定。
3.XMPP协议,它是一种基于XML的传递协议,具有很强的灵活性和可扩展性。它的特点是将复杂性从客户端转移到了服务器端。
听说GTalk、QQ、IM等都用这个协议。

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

XMPP协议实现原理介绍<一>_第1张图片

4. XMPP协议地址格式:

XMPP协议实现原理介绍<一>_第2张图片

5. XMPP消息格式:

XMPP协议实现原理介绍<一>_第3张图片

XMPP协议实现原理介绍<一>_第4张图片

XMPP协议实现原理介绍<一>_第5张图片

XMPP协议实现原理介绍<一>_第6张图片

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的核心部分只是一个轻量级的协议,不能满足数据传输,只是在这里按照通俗的说法我把它看成数据传输,毕竟它的扩展中会有数据传输,只是方便理解。)XMPP核心协议是规范的通信协议 其扩展协议中才有数据的传输,它的过程就如同“解包装--〉包装”的过程,用户只需要明白它接受的类型,并理解它返回的类型,就可以很好的利用xmpp来进行数据通讯。


更多相关文章

  1. 编程之路-客户端学习知识点纲要(Web/iOS/Android/WP)
  2. Android下的应用编程——用HTTP协议实现文件上传功能
  3. Android高仿网易新闻客户端之动态添加标签
  4. Android 的AT命令协议栈初始化
  5. Github android客户端源代码分析之一:环境搭建
  6. 网络对讲机C#服务器 Android客户端(三) android客户端代码分析 附
  7. H5做的商城客户端,效果很不错

随机推荐

  1. 整理 酷炫 Android(安卓)开源UI框架 图表
  2. LeakCanary 的使用介绍
  3. Android之单元测试――下
  4. 如何制作一个android studio的aar依赖包
  5. android编写aidl的步骤
  6. 日期控件Android(安卓)自定义日历控件
  7. Android知识体系总结2020之Android部分对
  8. 利用JDBC连接服务器数据库(Android)
  9. Android APP整合微信分享
  10. Android应用程序键盘(Keyboard)消息处理机