由于近期开发的业务场景中有接触到,学习了解一下…
XMPP协议
可扩展消息与存在协议(英语:Extensible Messaging and Presence Protocol,缩写:XMPP)是一种以XML为基础的开放式即时通信协议,是经由互联网工程工作小组(IETF)通过的互联网标准。XMPP因为被Google Talk应用而被广大网民所接触。 – wikipedia
在开始了解XMPP前,我们可能还需要先了解下XML,相信现在这个版本的前端都对HTML异常熟悉,但是对XML则较为陌生,那XML是什么样的结构呢?
什么是XML?
- XML 指可扩展标记语言(EXtensible Markup Language)。
- XML 是一种标记语言,很类似 HTML。
- XML 的设计宗旨是传输数据,而非显示数据。
- XML 标签没有被预定义。您需要自行定义标签。
- XML 被设计为具有自我描述性。
- XML 是 W3C 的推荐标准。
XML本身是没有行为的
如何理解呢?即其结构本身只是一种描述性的东西,并不会携带什么副作用:
1 | <note> |
XML 仅仅是纯文本
XML 没什么特别的。它仅仅是纯文本而已。有能力处理纯文本的软件都可以处理 XML。不过,能够读懂 XML 的应用程序可以有针对性地处理 XML 的标签。标签的功能性意义依赖于应用程序的特性。
XML 不是对 HTML 的替代
XML 是对 HTML 的补充。
XML 是独立于软件和硬件的信息传输工具。
在大多数 web 应用程序中,XML 用于传输数据,而 HTML 用于格式化并显示数据。
XMPP的应用场景
XMPP主要应用在实时通信的场景中,该协议允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。在传输时,主要是与即时通讯相关的指令,在以前这些命令要么用2进制的形式发送(比如QQ),要么用纯文本指令加空格加参数加换行符的方式发送(比如MSN)。而XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。XMPP除了可用在实时通信的应用程序,还能用在网络管理、内容供稿、协同工具、文件共享、游戏、远程系统监控等。
XMPP的通俗解释
XMPP 是一种很类似于http协议的一种数据传输协议,它的过程就如同“解包装–〉包装”的过程,用户只需要明白它接收的类型,并理解它返回的类型,就可以很好的利用xmpp来进行数据通讯。
XMPP的网络架构
XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。
MQTT协议
简介
MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件(MQTT服务端的实现,如RabbitMQ等等) 。
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
特点
MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:
- 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;
- 即MQTT端发送一个Topic支持多端进行订阅,举个例子:固件端如温度传感器通过MQTT协议发送温度变化的消息,可能云端有订阅进行数据入库,也有可能手机APP有进行消息订阅,显示数据变化等等。
- 对负载内容屏蔽的消息传输;
- 使用 TCP/IP 提供网络连接;
- 有三种消息发布服务质量(可靠性):
- “至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
- “至少一次”,确保消息到达,但消息重复可能会发生。
- “只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
- 小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;
- 使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。
项目小结
所以其实当前的IOT项目本质上还是要基于网络连接的,即先对多端进行配网,分配IP后(4G,WI-FI连接等),再在TCP/IP模型的应用层(XMPP、MQTT)上进行工作(区分于以往PC端上的HTTP传输)。