MQTT技术调研

Message queuing  telemetry transport消息队列遥测传输

是一项为物联网而设计的消息传递技术,由 IBM开发,它是一种开放、精简、轻量级和容易实现的协议。

 

ApacheMINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。

 

采用MQTT协议实现Android推送

MQTT是一个轻量级的消息发布/订阅协议,它是实现基于手机客户端的消息推送服务器的理想解决方案。

 

 MQ 遥测传输 (MQTT) 是轻量级基于代理的发布/订阅的消息传输协议,设计思想是开放、简单、轻量、易于实现。
这些特点使它适用于受限环境。例如,但不仅限于此:
            网络代价昂贵,带宽低、不可靠。 
          在嵌入设备中运行,处理器和内存资源有限。
该协议的特点有:
          使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。 
          对负载内容屏蔽的消息传输。 
          使用TCP/IP 提供网络连接。 
有三种消息发布服务质量: 
        “至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。 
        “至少一次”,确保消息到达,但消息重复可能会发生。 
         “只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。 
        小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量。 

MINA:基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供)

com通信要在本地连接.它处于硬件层.

socket是建立在硬件层上的通信协议,可以和远程硬件通信。

串口数据传输协议简单(主要是RS232、RS485),数据线是双绞线,适合短距离数据传输,远距离受电,平干扰影响较大。

http://bbs.csdn.net/topics/70117463

 

 

结论:可以用于嵌入设备与云端的通信tcp/ip协议的远程控制,还可以用于手机端应用与云端的推送服务。

 

 

对比项

Https/rest api

socket

mqtt

使用场景

1.       用于get/post请求,web服务

2.       容错性强,短连接操作

1.       长连接 ,实时性强,性能高

2.       传输数据时间短

3.       用于操作频繁,点对点的通讯

4.       可以加密,数据安全性高

1.    异常网络不稳定下的消息可靠传输

2.       重试策略

3.       协议简洁、可扩展性强、省流量、省电

缺点

1.传输速度慢,数据包大;

2.实时交互服务器性能压力大

3.数据传输安全性差

1.需要对传输的数据进行解析

2.增加开发量: header头信息

1.    数据传输信息量少

2.    协议不成熟、复杂

协议

HTTP

TCP/UDP

TCP/UDP、串口通信

我们的结合点

Rest api接口,手机端APP与云端的交互短连接,web服务

设备与云端的物理连接传输层的通信,用于设备的直接控制长连接

设备与云端远程控制通信;手机客户端与云端的消息推送


Xively提供三种https,socket,mqtt与云端交互的连接方式。

Xively提供socket:websocket,tcpsocket 的2种方式。浏览器通过 JavaScript向服务器发出建立 WebSocket连接的请求,连接建立以后,客户端和服务器通过 TCP连接直接交换数据。WebSocket连接本质上是一个 TCP连接。用于长连接。

Xively提供QoSlevel 0 服务质量级别的mqtt连接,发布/订阅的消息传输协议,发送消息,会丢失也不作重试处理,传输时间短。用于网络信号不稳定的情况。

Xively提供https的rest  api接口请求,用于api接口调用的web服务。

 

附:

MQTT协议笔记之头部信息

http://www.blogjava.net/yongboy/archive/2014/02/07/409587.html

 

MINA:基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供) 

http定期轮询,socket长连接。


 【转载】

WebSocket入门和应用

WebSocket介绍

 

WebSocket是一种协议,本质上和http,tcp一样。协议是用来说明数据是如何传输的。它的url前缀是ws:// 或者wss://,后者是加密的websocket。WebSocket没有试图在HTTP之上模拟server推送,而是直接在TCP之上定义了帧协议,因此WebSocket能够实现全双工通信。

 

WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。 WebSocket通信协议于2011年被IETF定为标准 RFC 6455,WebSocketAPI被W3C定为标准。

 

WebSocket解决了web实时化以及服务器端推送的问题,相比传统http有如下好处: 1. 一个WEB客户端只建立一个TCP连接 2. Websocket服务端可以推送(push)数据到web客户端. 3. 有更加轻量级的头,减少数据传送量

 

更详细内容请移步维基百科

 

应用

 

客户端实时性一直是一个大问题。Web应用、移动应用以及电脑桌面程序本质上都是客户端程序。如何实时获取服务器内容呢?

 

现在很多网站为了实现推送技术,所用的技术都是轮询。当然还有基于flash的实时通信。推送最好的一种方法当然是保持Socket长连接,浏览器如何能发起TCP连接呢?HTML5的Websocket技术就解决了这个问题。用WebSocket实现web应用的实时通信已经很成熟了,很多语言都有相关的api实现(维基百科中已经列出了很多),如果你想的话,完全可以根据RFC 6455协议自己开发api实现。WebSocket极大的简化了Web实时性的开发。已经有很多相关介绍的文章了,比如本文末尾的参考资料。

 

这里接下来主要说说WebSocket在Android开发中的应用。

 

Android中使用WebSocket

 

长久依赖Android的推送一直困扰着我们,最偷懒的做法就是使用轮询模拟推送。而基于此,国内甚至出现了2家(可能我不知道,甚至更多)专门做推送服务的公司。我们知道推送最好的方法就是Socket长连接,但是对服务器有一定要求。项目由于领导的推动,需要实现“真正的推送”。

 

开始选择的方案就是Socket长连接直接搞,自定义协议,自己实现封包,拆包以及解决tcp粘包等问题。说实话自己对于稳定性以及实现方法都不是很有信心,主要是因为没有经验,技术确实有待提高,实现以后没有经过大量测试。

 

后来由于服务器统一放在总公司管理之下,不授权开放tcp端口,也就是说只能使用Http 80端口,直接悲剧了。。就这样直接上Socket长连接被否定了。后来后台的同事找到了WebSocket协议,发现刚好解决这个问题。因为这和前面提到的浏览器如何能发起TCP连接本质上是一个问题。所以WebSocket的另一个优点就是基于80端口实现socket推送。

 

前面已经说过了,WebSocket是一个协议,开发Android版本是可行的,并且已经有很多实现了。我们的实现选用的WebSocket RFC6455版本协议,我选择的是这个https://github.com/tavendo/AutobahnAndroid。作者已经内置了一些Demo,可以很快上手,还可以根据协议自己开发扩展实现。

 

这次就写到这里,以后可能写写一些细节实现。

 

参考资料:

http://zh.wikipedia.org/zh-cn/WebSocket

http://tools.ietf.org/html/rfc6455

http://cnodejs.org/topic/4f16442ccae1f4aa27001139

http://www.cnblogs.com/yjf512/archive/2013/03/11/2953483.html

本文地址:http://lmbj.net/blog/websocket-getting-started-and-use/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值