MQTT与WebSocket
所属分类 websocket
浏览量 53
MQTT协议(消息队列遥测传输协议,Message Queuing Telemetry Transport)
基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,属于应用层协议
消息不是直接从发送器发送到接收器,是由MQTT server(或称为 MQTT Broker)分发。(区别于WebSocket的点对点)
可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务,常用于物联网(IoT)应用中的设备间通信
MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。发布者和消费者之间并不关心对方,都只和代理(Broker)(服务器)打交道
提供心跳机制、遗嘱消息、QoS 质量等级+离线消息、主题和安全管理等多种特性
HTML5定义了 WebSocket 协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。
基于TCP协议的应用层传输协议
持久连接:连接创建后,客户端和服务端的数据传输不用新建连接。
全双工通信:客户端和服务端可以双向通信
较少的开销:数据交换时,数据包头较小
1、相同点
MQTT 和 WebSocket 都是应用层协议
都是使用 TCP 协议确保可靠传输数据
都支持双向通信
都使用二进制传输
2、通信模型
WebSocket 是一种简单的报文协议,仅仅定义了会话的发起方式和报文格式及类型。如何使用报文通信全由应用程序控制
MQTT 是一种比较复杂的消息协议,规定了客户端和服务器的通信模型,是一种面向主题(topic)的消息广播协议,基于发布/订阅模式
MQTT 是一套比较复杂的消息投递协议,而 WebSocket则只是在TCP协议之上实现了简单的报文通信。
两种协议工作层次不一样,也就是常说的“WebSocket的通信形式层级过低”
3、连接建立方式
WebSocket 基于 HTTP/1.1 的 Upgrade 机制协商会话,协商完成后协议由HTTP升级到WebSocket,完成双工信道的建立
MQTT 协议则需要通过 CONNECT 报文协商会话,TCP连接建立之后,客户端会主动发送 CONNECT 报文。
服务端准备好之后会回应 CONNACK 报文,完成双工信道的建立
4、消息收发方式
WebSocket 收发消息不需要对方确认
MQTT 收发消息需要根据投递级别(QoS)进行确认:QoS 0(最多一次)、QoS 1(最少一次)、QoS 2(恰好一次)
5、保活机制
WebSocket 只规定了 ping/pong 两种报文,用于心跳探测,但协议并不强制要求定时收发心跳包
MQTT 则有明确的心跳协商机制。
协商会话使用的 CONNECT 报文包含 Keep Alive 头部信息,使用两个字节传输心跳间隔,单位是秒。
会话协商后需要定时收发 PINGREQ 和 PINGRESP 报文。
6、使用场景
MQTT是为了物联网场景设计的基于TCP的Pub/Sub协议,有许多为物联网优化的特性,比如适应不同网络的QoS、层级主题、遗言等
WebSocket是为了HTML5应用方便与服务器双向通讯而设计的协议,HTTP握手然后转TCP协议,用于取代之前的Server Push、Comet、长轮询等老旧实现
MQTT VS HTTP
MQTT协议简介
上一篇
下一篇
Sec-WebSocket-Key 说明
WebSocket介绍
netty内置编解码器
WebSocket通信过程及原理
websocket 聊天室简单例子
netty http server 实例