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/