XMPP基本内容简单介绍
即时通讯技术简单介绍
即时通讯技术(IM)支持用户在线实时交谈。假设要发送一条信息,用户须要打开一个小窗体,以便让用户及其朋友在当中输入信息并让交谈两方都看到交谈的内容.有很多的IM系统,如AOL
IM、Yahoo IM、 MSN以及QQ。它们最大的差别在于各自通讯协议的实现,所以即时通讯技术的核心在于它的传输协议。
协议用来说明信息在网络上怎样传输。假设有了统一的传输协议,那么应当能够实现各个IM之间的直接通讯,为了创建即时通讯的统一标准,眼下已经出现过的IM协议包含:IETF的对话初始协议(SIP)和即时通讯对话初始协议和表示扩展协议(SIMPLE)、应用交换协议(APEX)、显示和即时通讯协议(PRIM)及基于XML且开放的可扩展通讯和表示协议(XMPP)协议(常称为
Jabber 协议).
人们多次努力,试图统一各大主要IM供应商的标准(AOL、Yahoo及
Microsoft)。但无一成功,且每一种IM仍然继续使用自己所拥有的协议.
XMPP起源
XMPP是基于XML的协议,用于即时消息(IM)以及在线现场探測。最初,XMPP作为一个框架开发。目标是支持企业环境内的即时消息传递和联机状态应用程序。当时的即时消息传递网络是私有的,不适合企业使用。年),是一个开源组织定义的网络即时通信协议。
XMPP是一个分散型通信网络,这意味着。仅仅要网络基础设施同意,不论什么XMPP用户都能够向其它不论什么XMPP用户传递消息。多个XMPPserver也能够通过一个专门的“server-server”协议相互通信,提供了创建分散型社交网络和协作框架的可能性
虽然XMPP的出现是为了满足“个人-个人”即时消息传递的要求。但它全然不必局限于此任务。
XMPP概述
XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。
这表明XMPP是可扩展的。能够通过发送扩展的信息来处理用户的需求,以及在
XMPP的顶端建立如内容公布系统和基于地址的服务等应用程序。
并且,XMPP包括了针对server端的软件协议。使之能与还有一个进行通话,这使得开发人员更easy建立客户应用程序或给一个配置好的系统加入功能。XMPP的核心XML流传输协议的定义使得XMPP可以在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议可以很美丽
XMPP的即时通讯扩展应用部分是依据IETF在这之前对即时通讯的一个抽象定义的,与其它业已得到广泛使用的即时通讯协议。诸如AIM,QQ等有功能完整,完好等先进性
XMPP的扩展协议Jingle使得其支持语音和视频。眼下iOS尚不支持
XMPP的官方文档时RFC
XMPP协议以前是Google力推的即时通信协议。其代表作品是GTalk
XMPP定义
MPP:The Extensible Messaging and Presence Protocol(可扩展通讯和表示协议)
XMPP可用于服务类实时通讯、表示和需求响应服务中的XML数据元流式传输。XMPP以Jabber协议为基础,而Jabber是即时通讯中经常使用的开放式协议
XMPP是基于XML的协议,用于即时消息(IM)以及在线现场探測。促进server之间的准即时操作。
这个协议可能终于同意因特网用户向因特网上的其它不论什么人发送即时消息,即使其操作系统和浏览器不同.
XMPP的基本结构
XMPP是一个典型的C/S架构。而不是像大多数即时通讯软件一样,使用P2Pclient到client的架构,也就是说在大多数情况下。当两个client进行通讯时,他们的消息都是通过server传递的。採用这样的架构,主要是为了简化client。将大多数工作放在server端进行。
XMPP中定义了三个角色,client,server。网关。通信可以在这三者的随意两个之间双向发生。
server同一时候承担了client信息记录,连接管理和信息的路由功能.
网关承担着与异构即时通信系统的互联互通,异构系统能够包含SMS(短信),MSN,ICQ等
主要的网络形式是单client通过TCP/IP连接到单server,然后在之上传输XML流.
XMPP工作原理
1:节点连接到server
2:server利用本地文件夹系统中的证书对其认证
3:节点指定目标地址,让server告知目标状态
4:server查找、连接并进行相互认证
5:节点之间进行交互
XMPP工作原理示意图
传输内容
XMPP应用传输的是与即时通讯相关的指令。在曾经这些命令要么用二进制的形式发送(比方QQ),要么用纯文本指令加空格加參数加换行符的方式发送(比方MSN)
而XMPP传输的即时通讯指令的逻辑与以往相仿,仅仅是协议的形式变成了XML格式的纯文本。
这不但使得解析easy了。人也easy阅读了,方便了开发和查错
而XMPP的核心部分就是一个在网络上分片段发送XML的流协议。
这个流协议是XMPP的即时通讯指令的传递基础,也是一个很重要的能够被进一步利用的网络基础协议。能够说,XMPP用TCP传的是XML流.
XMPP
通信的结构(XMPP——JID)
每一个 XMPPclient用户必须拥有一个全局惟一标识符。基于历史原因,这些标识符称为
Jabber ID或JID。
鉴于协议的分布式特征,JID应包括联系用户所需的全部信息,JID的结构类似于电子邮件地址,但不要求
JID同一时候也是有效的电子邮件收件人。
client和server节点。被统称为 XMPP实体,都拥有JID。一个有效的JID包含一系列元素:(1)域名(domain
identifier);(2)节点(node identifier);(3)源(resource
identifier).它的格式是node@domain/resource。resource这个是可选的。resource就是用于区分同一用户不同端登陆。
比如:SomeCorp公司的员工 John Doe可能拥有JID:John.Doe@somecorp.com。当中somecorp.com是
SomeCorp公司的XMPPserver的地址,John.Doe是John Doe的username。
还能够使用JID连接到其它资源。这同意在一个XMPP实体标识符之外进一步处理拓展
通信类别及公共XML属性
使用XMPP的实时消息传递系统包括三大通信类别:
消息传递,当中数据在有关各方之间传输
联机状态,同意用户广播其在线状态和可用性
信息/查询请求,它同意XMPP实体发起请求并从还有一个实体接收响应
以上三种类型的XMPP节都拥有下面公共属性:
from:源XMPP实体的JID
to:目标接收者的JID
id:当前对话的可选标识符
type:节的可选子类型
xml:lang:假设内容是人们可读的。则为消息语言的描写叙述.
基于 XMPP的传输数据发生在一些 XML流上,默认在port5222上操作。这些
XML流实际上是两个完整的 XML文档。每一个文档相应一个通信方向。一旦会话建立。stream元素将打开。
这个元素将封装整个通信文档。
然后,一些节被注入这个文档的第二层。最后,一旦通信结束,stream元素将关闭,形成一个完整的文档。
XMPP协议的组成
基本的XMPP协议范本及当今应用非常广的XMPP扩展:
RFC3920 XMPP:核心。定义了XMPP协议框架下应用的网络架构。引入了XML
Stream(XML流)与XML Stanza(XML节),并规定XMPP协议在通信过程中使用的XML标签。
使用XML标签从根本上说是协议开放性与扩展性的须要。此外,在通信的安全方面,把TLS安全传输机制与SASL认证机制引入到内核,与XMPP进行无缝的连接,为协议的安全性、可靠性奠定了基础。Core文档还规定了错误的定义及处理、XML的使用规范、JID(Jabber
Identifier,Jabber标识符)的定义、命名规范等等。
所以这是全部基于XMPP协议的应用都必需支持的文档。
RFC3921:用户成功登陆到server之后。公布更新自己的在线好友管理、发送即时聊天消息等业务。全部的这些业务都是通过三种主要的XML节来完毕的:IQ
Stanza(IQ节), Presence Stanza(Presence节),
Message Stanza(Message节)。RFC3921还对堵塞策略进行了定义,定义是多种堵塞方式。能够说,RFC3921是RFC3920的充分补充。两个文档结合起来。就形成了一个主要的即时通信协议平台,在这个平台上能够开发出各种各样的应用。
XEP-0030服务搜索。一个强大的用来測定XMPP网络中的其他实体所支持特性的协议。
XEP-0115实体性能。XEP-0030的一个通过即时出席的定制。能够实时改变交变广告功能。
XEP-0045多人聊天。一组定义參与和管理多用户聊天室的协议,类似于Internet的Relay
Chat,具有非常高的安全性。
XEP-0096文件传输。
定义了从一个XMPP实体到还有一个的文件传输。
XEP-0124 HTTP绑定。将XMPP绑定到HTTP而不是TCP。主要用于不可以持久的维持与serverTCP连接的设备。
XEP-0166 Jingle。规定了多媒体通信协商的总体架构。
XEP- Jingle Audio Content Description Format。定义了从一个XMPP实体到还有一个的语音传输过程。
XEP- Jingle ICE(Interactive Connectivity Establishment)Transport。ICE传输机制,文件攻克了怎样让防火墙或是NAT(Network
Address Translation)保护下的实体建立连接的问题。
XEP- Jingle Raw UDP Transport。纯UDP传输机制,文件讲述了怎样在没有防火墙且在同一网络下建立连接的。
XEP- Jingle Video Content Description Format。定义了从一个XMPP实体到还有一个的视频传输过程。
XEP- Jingle DTMF(Dual Tone Multi-Frequency)。
XEP- Jingle Telepathy Transport Method
XMPP 要点
1. client(C) 和server端(S) 通过TCP连接5222port进行全双工通信.
2. XMPP 信息均包括在 XML streams中.一个XMPP会话, 開始于<stream> 标签, 并结束于</stream>标签.全部其它的信息都位于这俩标签之间.
3. 出于安全目的考虑, 開始<stream>之后, 兴许的内容会被适度的使用 Transpor Layer Security (TLS) 协商传输 和强制性的 Simple Authentication 和 Security Layer (SASL) 协商传输。
4. SASL协商完毕后, 一个新的 stream 将会被迅速打开, 它将会更加安全和保密.
XMPP的优缺点
长处:开放,标准(XMPP的技术规格已被定义在RFC3920及RFC3921),证实可用,分散,安全,可扩展
缺点:数据负载过重,没有二进制传输
XMPP的传输小结
XMPP是一种类似于HTTP协议的一种传输数据协议,其过程就如同“解包装--〉包装”的过程。
仅仅须要理解其接收的类型及返回的类型。便能够非常好的利用XMPP来进行数据通讯.
XMPP官方站点——http://xmpp.org
推荐:
http://blog.csdn.net/woaifen3344/article/details/44559733
XMPP基本内容简单介绍的更多相关文章
- 《HTML 5网页开发实例具体解释》样章、内容简单介绍、前言
http://spu.jd.com/1167757597.html http://product.dangdang.com/23484942.html 样章 http://download.csdn. ...
- 【浅墨著作】《OpenCV3编程入门》内容简单介绍&勘误&配套源码下载
经过近一年的沉淀和总结,<OpenCV3编程入门>一书最终和大家见面了. 近期有为数不少的小伙伴们发邮件给浅墨建议最好在博客里面贴出这本书的文件夹,方便大家更好的了解这本书的内容.事实上近 ...
- 《PHP 5.5从零開始学(视频教学版)》内容简单介绍、文件夹
<PHP 5.5从零開始学(视频教学版)>当当网购买地址: http://product.dangdang.com/23586810.html <PHP 5.5从零開始学(视频教学版 ...
- 一个新人对JavaScript的内容简单介绍
JavaScript 1.基本的数据类型:字符串 小数 整数 时间日期 布尔型等. 2.变量: JS定义变量通通都是用var开头,var里面可以放任何东西(如:小数,整数,字符串,时间日期等等 ...
- hello1.java内容简单介绍
双击该Hello.java文件以查看它. 在Hello类,称为管理bean类,提供了getter和setter方法name中的Facelets页面表达式中使用属性.默认情况下,表达式语言引用类名,第一 ...
- CocoaPods常用终端命令及Profile文件简单介绍
Pod常用终端命令 pod init 创建pod文件 pod install 开始安装第三方框架,如果网上有更新,会安装最新的 pod install --verbose--no-repo-updat ...
- iOS开发拓展篇-XMPP简单介绍
iOS开发拓展篇-XMPP简单介绍 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双 ...
- iOS开发——网络编程OC篇&(一)XMPP简单介绍与准备
XMPP简单介绍与准备 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈 ...
- WPF自学入门(六)WPF带标题的内容控件简单介绍
在WPF自学入门(二)WPF-XAML布局控件的文章中分别介绍StackPanel,WarpPanel,DockPanel,Grid,Canvas五种布局容器的使用,可以让我们大致了解容器可以使用在什 ...
随机推荐
- 第一个只出现一次的字符--java实现
/** * 主要思想是通过数组来保存每个字符的出现次数,数组访问O(1),所以总时间复杂度可以保持O(n),通过两次遍历可以解决问题 * @param ch * @return */ public s ...
- HDU 5306 吉司机线段树
思路: 后面nlogn的部分是伪证... 大家可以构造数据证明是这是nlog^2n的啊~ 吉老司机翻车了 //By SiriusRen #include <cstdio> #include ...
- flask 三剑客
1.flask中的httpresponse @app.route("/") # app中的route装饰器 def index(): # 视图函数 return "Hel ...
- Java常用类库(一) : Object 和日期类的简单使用
顶哥说:Java是世界的,但项目不是! Java有非常多的类库,而我们不会也不用都去学习,毕竟你也仅仅掌握了你手机20%的功能却足够你使用,不是吗? 今天介绍以下类: l Object l Dat ...
- [ HAOI 2008 ] 玩具取名
\(\\\) \(Description\) 在一个只有\(W,I,N,G\)的字符集中,给出四个字符的若干映射,每个映射为一个字符映射到两个字符,现给你一个假定由一个字符经过多次映射产生的字符串,问 ...
- echarts交叉关系图二
echarts关系图表,此图是坐标关系图,此图用的随机坐标,此图可以拖拽,更方便整理关系, 引入echarts.js就可以实现 代码: var graph={ //这是数据项目中一般都是获取到的 no ...
- ASP.net参数传递总结
同一页面.aspx与.aspx.cs之间参数传递 1. .aspx.cs接收.aspx的参数:由于.aspx和.aspx.cs为继承关系,所以.aspx.cs可以直接对.aspx中的ID进行值提取,具 ...
- 【sqli-labs】 less47 GET -Error based -String -Order By Clause(GET型基于错误的字符型Order By从句注入)
http://192.168.136.128/sqli-labs-master/Less-47/?sort=1 改变sort的值,结果仍然是order by 1的结果 http://192.168.1 ...
- HDU_Reward_拓扑排序
Reward Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- uva 10048 Audiophobia UVA - 10048
题目简介 一个无向正权图,求任意两个节点之间的路径里最短的路径长度. 直接Floyd解决,就是注意要把Floyd的DP式子改一下成 G[i][j]=min(G[i][j],max(G[i][k],G[ ...