1、先看下相关国外的专业数据对四大协议的比较:node
Protocol CoAP XMPP RESTful HTTP MQTTandroid
Transport | UDP | TCP | TCP | TCP |
Messaging | Request/Response | Publish/Subscribe Request/Response | Request/Response | Publish/Subscribe Request/Response |
2G, 3G, 4G Suitability (1000s nodes) | Excellent | Excellent | Excellent | Excellent |
LLN Suitability (1000s nodes) | Excellent | Fair | Fair | Fair |
Compute Resources | 10Ks RAM/Flash | 10Ks RAM/Flash | 10Ks RAM/Flash | 10Ks RAM/Flash |
Success Storied | Utility Field Area Networks | Remote management of consumer white goods | Smart Energy Profile 2 (premise energy management/home services) | Extending enterprise messaging into IoT application |
XML的解析对于嵌入多设备来讲是比较痛苦的 ,因此在嵌入设备上作开发的时候,最好不要选择基于XML的协议。缓存
2、四大协议的基本介绍:服务器
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通信协议,有可能成为物联网的重要组成部分。该协议支持全部平台,几乎能够把全部联网物品和外部链接起来,被用来当作传感器和致动器(好比经过Twitter让房屋联网)的通讯协议架构
REST 指的是一组 架构约束条件和原则。知足这些约束条件和原则的应用程序或设计就是 RESTful。app
Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器的每一个请求都必须包含理解请求所必需的信息。若是服务器在请求之间的任什么时候间点重启,客户端不会获得通知。此外,无状态请求能够由任何可用服务器回答,这十分适合 云计算之类的环境。客户端能够缓存数据以改进性能oop
3、从现有的移动端(Android)消息推送方案中,也能够看出MQTT协议和XMPP协议的优缺点性能
方案一、 使用GCM服务(Google Cloud Messaging)
简介:Google推出的云消息服务,即第二代的G2DM。
优势:Google提供的服务、原生、简单,无需实现和部署服务端。
缺点:Android版本限制(必须大于2.2版本),该服务在国内不够稳定、须要用户绑定Google账号,受限于Google。
方案二、 使用XMPP协议(Openfire + Spark + Smack)
简介:基于XML协议的通信协议,前身是Jabber,目前已由IETF国际标准化组织完成了标准化工做。
优势:协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中,且已有开源的Java版的开发实例androidpn。
缺点:协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。
方案三、 使用MQTT协议(更多信息见: http://mqtt.org/ )
简介:轻量级的、基于代理的“发布/订阅”模式的消息传输协议。
优势:协议简洁、小巧、可扩展性强、省流量、省电,目前已经应用到企业领域(参考: http://mqtt.org/software ),且已有C++版的服务端组件rsmb。
缺点:不够成熟、实现较复杂、服务端组件rsmb不开源,部署硬件成本较高。
方案四、 使用HTTP轮循方式
简介:定时向HTTP服务端接口(Web Service API)获取最新消息。
优势:实现简单、可控性强,部署硬件成本低。
缺点:实时性差。
网站
对各个方案的优缺点的研究和对比,推荐使用MQTT协议的方案进行实现,主要缘由是: MQTT最快速,也最省流量(固定头长度仅为2字节),且极易扩展,适合二次开发 。ui
总结来讲:
若是咱们对上面的结果进行一次PK,我想最后的结果就是MQTT vs CoAP。HTTP对于嵌入式设备来讲过重了,也不灵活,XMPP就更不用说了,与MQTT还有一比的即是CoAP——一个还在草稿阶段的协议。