MQTT简介 网络
MQTT是IBM开发的一个即时通信协议,该协议支持全部的平台,几乎能够把全部联网的物品和外部链接起来,被用来当作传感器和致动器(好比经过Twitter让房屋联网)的通讯协议session
MQTT的特色:
使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。这一点很相似于XMPP,可是MQTT的信息冗余远小于XMPP.
对负载内容屏蔽的消息传输。
使用TCP/IP提供网络链接。主流的MQTT是基于TCP链接进行数据推送的,可是一样有基于UDP的版本,叫作MQTT-SN。这两种版本因为基于不一样的链接方式,优缺点天然也就各有不一样了。 架构
三种消息传输方式QoS:
0表明“至多一次”,消息发布彻底依赖底层 TCP/IP 协议。会发生消息丢失或重复。这一级别可用于以下状况,环境传感器数据,丢失一次读记录无所谓,由于不久后还会有第二次发送。
1表明“至少一次”,确保消息到达,但消息重复可能会发生。
2表明“只有一次”,确保消息到达一次。这一级别可用于以下状况,在计费系统中,消息重复或丢失会致使不正确的结果。 备注:因为服务端采用Mosca实现,Mosca目前只支持到QoS 1
开发
简单说明下:it
若是发送的是临时的消息,例如给某topic全部在线的设备发送一条消息,丢失的话也无所谓,0就能够了(客户端登陆的时候要指明支持的QoS级别,同时发送消息的时候也要指明这条消息支持的QoS级别),io
若是须要客户端保证能接收消息,须要指定QoS为1,登录
若是同时须要假如客户端不在线也要能接收到消息,那么客户端登陆的时候要指定session的有效性,接收离线消息须要指定服务端要保留客户端的session状态。程序
MQTT是基于订阅者模型架构的,客户端若是互相通讯,必须是在同一订阅主题下,即都订阅了同一个topic,客户端之间是没办法直接通信的。通信
订阅模型显而易见的好处是群发消息的话只须要发布到topic,全部订阅了这个topic的客户端就能够接收到消息了。数据
发送消息必须发送到某个topic,重点说明的是无论客户端是否订阅了该topic,它均可以向该topic发送消息,还有若是客户端订阅了该主题,那么本身发送的消息也会被接收到。