XMPP协议简介

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

定义
全称:可扩展通讯和表示协议
简介:可扩展通讯和表示协议 (XMPP) 可用于服务类实时通讯、表示和需求响应服务中的XML数据元流式传输。XMPP以Jabber协议为基础,而Jabber是即时通讯中常用的开放式协议。XMPP is the IETF's formalization of the base XML streaming protocols for instant messaging and presence developed within the Jabber open-source community in 1999
XMPP(可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。它在促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。
XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分;
核心的XML流传输协议
基于XMLFreeEIM流传输的即时通讯扩展应用
XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。
XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。
XMPP的扩展协议Jingle使得其支持语音和视频。
XMPP的官方文档是RFC 3920.

基本网络结构编辑

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

功能编辑

传输的是与即时通讯相关的指令。在以前这些命令要么用2进制的形式发送(比如QQ),要么用纯文本指令加空格加参数加换行符的方式发送(比如MSN)。而XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。

具体应用编辑

举个例子看看所谓的XML(标准通用标记语言的子集)流是什么样子的?
客户端:
1
2
3
4
5
6
<?xmlversion='1.0'?>
<stream:stream
to='example_com'
xmlns='jabber:client'
xmlns:stream='http_etherx_jabber_org/streams'
version='1.0'>
服务器:
1
2
3
4
5
6
7
<?xmlversion='1.0'?>
<stream:stream
from='example_com'
id='someid'
xmlns='jabber:client'
xmlns:stream='http_etherx_jabber_org/streams'
version='1.0'>
  • 其他通信
客户端:
1
2
3
<messagefrom='juliet_example_com'
to='romeo_example_net'
xml:lang='zh-cn'>
客户端: <body>Art thou not Romeo, and a Montague?</body>
客户端:</message>
服务器:<message from='romeo_example_net'
to='juliet_example_com'
xml:lang='zh-cn'>
服务器:<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连接。
目前不少IM应用系统如:Google公司的Google Talk以及Jive Messenger等开源应用,都是遵循XMPP协议集而设计实现的,这些应用具有很好的互通性。

系统特点编辑

  1. 客户机/服务器通信模式;
  2. 分布式网络;
  3. 简单的客户端;
  4. 标准通用标记语言的子集XML的数据格式。

通俗解释编辑

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

优劣点编辑

优点

XMPP协议是自由、开放、公开的,并且易于了解。而且在客户端、服务器、组件、源码库等方面,都已经各自有多种实现。
互联网工程工作小组(IETF)已经将Jabber的核心XML流协议以XMPP之名,正式列为认可的实时通信及Presence技术。而XMPP的技术规格已被定义在RFC 3920及RFC 3921。任何IM供应商在遵循XMPP协议下,都可与Google Talk实现连接。
第一个Jabber(现在XMPP)技术是Jeremie Miller在1998年开发的,现在已经相当稳定;数以百计的开发者为XMPP技术而努力。今日的互联网上有数以万计的XMPP服务器运作着,并有数以百万计的人们使用XMPP实时传讯软件。
XMPP网络的架构和电子邮件十分相像;XMPP核心协议通信方式是先创建一个stream,XMPP以TCP传递XML数据流,没有中央主服务器。任何人都可以运行自己的XMPP服务器,使个人及组织能够掌控他们的实时传讯体验。
任何XMPP协议的服务器可以独立于公众XMPP网络(例如在企业内部网络中),而使用SASL及TL等技术的可靠安全性,已内置于核心XMPP技术规格中。
XML命名空间的威力可使任何人在核心协议的基础上建造定制化的功能;为了维持通透性,常见的扩展有XMPP标准基金会。
XMPP除了可用在实时通信的应用程序,还能用在网络管理、内容供稿、协同工具、文件共享、游戏、远程系统监控等。
用XMPP协议来建造及部署实时应用程序及服务的公司及开放源代码计划分布在各种领域;用XMPP技术开发软件,资源及支持的来源是多样的,使得使你不会陷于被“绑架”的困境。

缺点

随着通常超过70%的XMPP协议的服务器的数据流量的存在和近60%的被重复转发,XMPP协议目前拥有一个大型架空中存在的数据提供给多个收件人。新的议定书正在研究,以减轻这一问题。
XMPP协议的方式被编码为一个单一的长的XML文件,因此无法提供修改二进制数据。因此, 文件传输协议一样使用外部的HTTP。如果不可避免,XMPP协议还提供了带编码的文件传输的所有数据使用的Base64。至于其他二进制数据加密会话(encrypted conversations)或图形图标(graphic icons)以嵌入式使用相同的方法。

转载自百度百科:http://baike.baidu.com/link?url=QorTUBl5kOf9I9pc-VF7nCOx17t-CThU0VIPgLa7as9dZKAu3ZRB72pXZmXTE67lGOl5lMpTJIdOK5BDbrGWE_

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500038.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[前台]---关于input标签的value值

碰到这个情况,先上代码: <input type"hidden" id"input-shoppingListType" value0/> 这样写的话,最终在获取value的值的时候,平时都是0,直到有一次成了’0/’,发现了吗?把后面的斜杠也给拿到了,最终导致报错了 结果: <input type"hidde…

布尔类型(boolean/Boolean)自动生成的get方法需要注意的小细节

idea会自动生成get/set方法的, 对于布尔类型,要非常注意生成的get方法,到底是is开头还是get开头. 先说结论: 1.Boolean类型,生成的get方法是get开头的(建议使用这个). 2.boolean类型,生成的get方法是is开头的(用这个最好重写getXxx()格式的方法). 以下这个例子,可以验证这…

[前台]---js中去掉双引号或者单引号

在js中有这么一种情况,就是需要在function中动态的给标签加属性值,这时候如果带有引号,可能会导致加的属性值不是想要的,这时只需要去掉引号就可以,建议用下面这个: var a "双引号字符串"; a a.replace("\"","").replace("\"&q…

XMPP扩展协议详解

基本的jabber客户端必须实现以下标准协议&#xff08;XEP-0211&#xff09; 1、RFC3920 Core http://tools.ietf.org/html/rfc3920 2、RFC3921 Instant Messaging and Presence http://tools.ietf.org/html/rfc3921 3、XEP-030 Service Discovery http://www.xmpp.org/extensio…

[前台]---图片上传和校验

记一次简单的图片上传验证: 页面:<input type"file" id"hiddenFile" onchange"uploadImage(event)" accept"image/jpg, image/jpeg, image/gif, image/png">立即上传图片js: function uploadImage(e) {//图片的提前校验,如果返…

FMDB简介

FMDB在SQLite基础上封装。 FMDB会在编译的时候知道你是用的ARC还是MRC&#xff0c;然后进行相应处理。使用方法一、FMDB有三个主要的类1.FMDatabase – 表示一个单独的SQLite数据库。 用来执行SQLite的命令。2.FMResultSet – 表示FMDatabase执行查询后结果集3.FMDatabaseQueue…

[前台]---js+jquery校验姓名,手机号,身份证号

记一次前台验证姓名,手机号,身份证号的代码,复制即用,前提是有引入jquery. var name "姓名"if(!is_forbidName(name)){alert("姓名有误!");}var phone "18888888888";var validateTel /^1[23456789]\d{9}/;if(!validateTel.test(phone)){aler…

React Native新手引导

序言 本教程希望让您快速熟悉使用React Native来编写iOS和Android App的技巧。如果你希望知道React Native是什么以及为什么Facebook打造了它&#xff0c;可以读读这篇博文 我们这里假设你已经有了使用React编写Web应用程序的经验。如果还没有&#xff0c;建议你可以先从React官…

[设计模式] ------ 代理模式

几句话讲明白代理模式 静态代理&#xff1a; 1.定义 个接口A,接口有个方法methodA(); 2.定义一个实现类B,实现这个接口A,并重写方法methodA(); 3.定义一个代理类C,也实现接口A,并将类B作为他的一个属性&#xff0c; 然后C也重写方法methodA();但方法的实现为B&#xff0c;并调…

React Native使用指南-原生模块

有时候App需要访问平台API&#xff0c;但React Native可能还没有相应的模块封装&#xff1b;或者你需要复用Objective-C、Swift或C代码&#xff0c;而不是用JavaScript重新实现一遍&#xff1b;又或者你需要实现某些高性能、多线程的代码&#xff0c;譬如图片处理、数据库、或者…

服务器启动报错:One or more listeners failed to start. Full details will be found in the ...

idea本地启动web项目时 报错如下: One or more listeners failed to start. Full details will be found in the appropriate container log file 我的解决方案: 增加一步,配置artifacts 具体如下: 这个地方选择自己本地的web项目文件夹 都配置完然后Apply下,这个都配置好…

React Native使用指南-原生UI组件

在如今的App中&#xff0c;已经有成千上万的原生UI部件了——其中的一些是平台的一部分&#xff0c;另一些可能来自于一些第三方库&#xff0c;而且可能你自己还收藏了很多。React Native已经封装了大部分最常见的组件&#xff0c;譬如ScrollView和TextInput&#xff0c;但不可…

[网络]------长连接和短连接

本文重点介绍&#xff1a; 长连接和短连接的定义&#xff0c;优缺点以及使用场景 前提须知: 1.HTTP/1.0默认使用短连接,HTTP/1.1开始,默认使用长连接 2.HTTP协议的长连接和短连接,实质是就是TCP协议的长连接和短连接 3.tcp协议建立连接需要三次握手,这个过程会耗费网络资源…

React Native使用指南-使用链接库

并不是所有的APP都需要使用全部的原生功能&#xff0c;包含支持全部特性的代码会增大应用的体积。但我们仍然希望能让你简单地根据自己的需求添加需要的特性。 在这种思想下&#xff0c;我们把许多特性都发布成为互不相关的静态库。 大部分的库只需要拖进两个文件就可以使用了&…

[网络]------TCP UDP HTTP Socket 区别

关于这几个的概念,网上已经很全面了,在这个做个笔记: 前提须知: 1.协议就是大家提前约定的一种规范,后人照着这个遵循就可以,也可以将语言理解为一种协议 2.网络通信的世界中,有七层协议(应用层,表示层,会话层,传输层,网络层,数据链路层,物理层) 正题: 1.TCP和UDP都属于传…

React Native使用指南-在设备上运行

注意在iOS设备上运行React Native应用需要一个Apple Developer account并且把你的设备注册为测试设备。本向导只包含React Native相关的主题。 译注&#xff1a;从XCode 7起&#xff0c;在自己的设备上调试App不再需要开发者账户了。 从设备访问开发服务器 在启用开发服务器的情…

java 贪吃蛇游戏

前言 此实现较为简陋&#xff0c;如有错误请指正。 其次代码中的图片需要自行添加地址并修改。 主类 public class Main { public static void main(String[] args) { new myGame(); } } 1 2 3 4 5 游戏类 import javax.swing.*; import java.awt.eve…

java方向好看的书

从Lucene到ElasticSearch:全文检索实战 大数据架构详解&#xff1a;从数据获取到深度学习 代码整洁之道 架构解密&#xff1a;从分布式到微服务 从Paxos到Zookeeper分布式一致性原理与实践 大型网站技术架构 核心原理与案例分析 分布式服务架构&#xff1a;原理、设计与实…

React Native使用指南-植入原生应用

由于React并没有假设你其余部分的技术栈——它通常只作为MVC模型中的V存在——它也很容易嵌入到一个并非由React Native开发的应用当中。实际上&#xff0c;它可以和常见的许多工具结合&#xff0c;譬如CocoaPods。 需求 CocoaPods – gem install cocoapodsNode.js 安装 nvm&a…

[数据库]---nosql,非关系型数据库整理

1.关系型数据库与非关系型数据库的区别 Tables关系型数据库非关系型数据库成本好的收费开源的,都免费的存储与查询硬盘存储,相对查的慢内存存储,查的快存储格式只能是基本格式多种多样年龄出现时间较长,较成熟后起之秀,不可小觑扩展性join等不好扩展方便集群事务强事务弱事务查…