物联网技术架构分层(物联网协议 mqtt

消息传递功能是物联网(IOT )的重要支撑,物联网的许多技术来源于移动互联网。 阐述阳光海豚移动互联网短信推送技术在物联网中的应用与发展。

从开发的角度看,

一、物联网架构和关键技术

无线接入是物联网设备端的核心技术,身份设备管理和消息推送技术是物联网云端的核心技术。 从场景体验的角度来看,除了前者之外,还包括手机前端开发技术。

IP互联体系结构已经是物联网的事实标准。 (关于物联网TCP/IP层的关键技术将另行说明,敬请关注。 这里所述的消息推送技术是基于TCP/IP协议的APP应用层协议技术。

首先,进一步抽象出基于IP体系结构的物品的互联网结构,如下图所示。 无视互联网和路由等基础技术。

核心结构是物联设备、网关、云。 物联设备分为两种,一种是自身自然支持TCP/IP,可以直接访问物联网。 例如有wifi、GPRS/3G/4G (当然,马上就要来了5G )等设备。 另一种情况是,无法支持IP协议,需要网关(协议转换)才能访问Zigbee和蓝牙等物品的互联网。 对蓝牙设备来说,手机其实是网关。

手机通过自身的蓝牙与周边蓝牙设备进行通信,消息通过手机的wifi或3G/4G模块与云服务端进行通信。

从场景的角度分析,物联网最终是为人类服务的,手机是人类体验最直接的入口。 因此,在上图中单独添加手机的构成要素,可以与一般意义上的网关进行区别。 这样,物联网的核心构成就是设备端—网关—云—手机。 从APP应用层开发技术的角度看,物联网APP应用建立在TCP/IP结构的基础上,在切断基础网关协议转换的基础上,物联网APP应用的组成部分是设备端—云端—手机。

OK,有了以上介绍,我们从物联网应用的角度分析了设备、云、手机的直接消息推送技术,包括云和设备端的双向通信技术、手机和云的双向通信技术。

二、移动互联网通信模式

互联网有B/S和C/S两种通信模式。 在移动互联网领域,APP通过C/S方式以客户端的角色与服务器进行通信wechat是一种超级APP,通过内置浏览器让用户运行H5程序,获得操作硬件设备的能力。

移动互联网B/S技术与传统互联网没有区别,内置wechat浏览器支持H5,因此平台可扩展性强。 由于我们最近将重点放在基于微信硬件平台的物联网上,我们将以B/S模式的消息传递技术为中心来说明其发展。

HTTP协议是B/S的基础,HTTP有GET和POST两种方式。

三、消息推送技术演进

1.HTTP单向通信

浏览器使用的是HTML文本标记语言。 也就是说,浏览器通过HTTP协议向服务器发送请求,服务器包含URL,即常说的网址。 服务器通过HTTP协议将与URL对应的HTML内容作为响应返回给浏览器。

1 )手机方面)因为wechat方面内置有浏览器,所以自然支持首页。 2 )从云端推送到手机端:云端使用JSP/PHP等技术开发设计前端页面和简单逻辑即可。 3 )设备端)设备端在线时或访问服务端的参数等时,需要模拟HTTP协议(c语言)向服务器发送请求,但请求的形式通常不是HTML,需要进行比较4 )云端推送至设备端)云端使用http servlet (http协议的servlet )对来自设备的http请求进行响应,并回复XML或JSON格式的消息。 5 )缺点:这种方式的通信方式的特点是,请求响应后,客户机总是向服务器发出请求,服务器进行响应。 服务器不会主动向客户端发送消息。 此外,在客户端发出请求后,服务器也只回复一次。 这种HTTP单向通信方式在互联网领域发挥着很大的作用,服务器端可以是无状态的,大大简化了服务器的服务流程,提高了效率。 但是,物联网领域需要双向通信能力。 服务方应能主动向设备方或手机发出信息。

在这种模式下,怎么进行双向通信? 唯一的方法是客户端不断发出请求(或周期性),服务器不断给予回复。 这个模型的缺点很明显。

第一,网络负荷较高,每次服务响应时都会关闭连接,所以每次通信时都必须重新握手。 HTTP协议标头内容的长度不小。 二是实时性差。 在一般的设备端,定期轮询服务中是否有新消息。 用轮询方式是行不通的

的实时性的。三、浏览器端每次发出请求是以HTML全部内容来响应的,消息长度过大,在这种情况下,会发现浏览器页面不断地刷新。

2.Ajax轮询

Ajax技术是浏览器支持的一种JavaScript技术。其能够局部改善用户体验技术,让用户在不察觉浏览器页面刷新的情况向服务器发出请求,并获得响应。其原理是:

1)微信浏览器发出URL页面请求,服务器响应HTML页面内容。2)HTML页面使用js调用XMLHttpRequest来向服务器发出异步通信请求。3)服务器响应XML格式数据给浏览器页面。4)HTML页面使用DOM模型来动态刷新页面元素。

Ajax技术是微信硬件平台框架中推荐的页面交互技术,但其本质还是遵守HTTP单向通信的规则,只是页面交互时不需要刷新整个页面。其双向通信实时性问题依然未能解决。

3.Websocket

Websocket是HTML5支持的一种新的协议,它能够真正支持浏览器和服务器之间进行双向通信。Tomcat7及以上版本也已经支持Websocket API。

1)为了能够兼容浏览器HTTP协议,Websocket规定在第一次发起请求时依然要发出符合HTTP协议规范的Header,但其Connection域的值是Upgrade,并增加Upgrade域,值是socket,即告知服务器,即将建立的通信是Websocket双向通信。服务器如果接受,会返回101给客户端进行协议切换。2)接下来的通信将不再以HTTP作为传输协议,而是使用Websocket规定的数据格式进行通信,其分为控制帧和数据帧。控制帧是发出心跳帧(ping),而服务器响应pong,还有结束帧;数据帧就是真实数据格式,其格式头只有6个字节(2个字节头和4个字节的掩码),后面就是真实的数据(经过掩码转换)。比HTTP格式头的长度要jldhy了。3)客户端和服务器之间是一直保持连接,直到close,当前期间要发发2个字节的3字节的ping帧。

可见Websocket比ajax有了极大的改进。其不仅省掉经常要连接握手,还简化的协议的格式,最重要的是实时性得到保证,因为双方是真正的全双工通信。

微信浏览器客户端支持Websocket,服务器使用Tomcat7以上的WebsocketServlet类,设备端要根据Websocket协议用C语言来模拟通信。

我们在用设备端模拟Websocket通信协议时一般会先看协议,再用HttpWatch等工具来抓包,抓到的头是GET ws://ip:port/path,如果在C语言也是这样模拟发包则会报400 bad request。因为C语言利用socket建立通信时已经利用了IP和port了,其发的第一个包的头是GET/path即可,不能在其前面加上ws://ip:port/。

4.MQTT

以上的分析都是将移动互联网的技术运用到物联网,其都有一个特定就是建立连接时会传送URL地址,由两个角色是客户端和服务器,这种架构我们一般称为是RESTful架构(另外,还有SOAP 面向应用的web services架构)。RESTful架构在互联网得到越来越广泛的运用,但物联网除了互联之外,还有其独有的特征,就是其终端设备的资源有限、低功耗运用场景、网络连接环境差(时不时断开连接)等。用C语言模拟的方式来使用RESTful架构(如Websocket)会使得终端的负荷较重,而且服务器发给终端设备的消息有可能因为断开连接而收不到。

MQTT是IBM针对物联网退出的一种轻量级协议,建立于TCP/IP层协议之上。其是物联网的重要组成部分,可能会成为物联网的事实标准。其具有QoS,能够缓冲消息,并通过重传机制保证终端设备收到消息;其消息格式极其简化,最短是两个字节;其提供订阅和发布模式,高效推送消息。

MQTT有三个角色,包括服务器代理、订阅者和发布者。

1)启动服务器代理。2)订阅者向服务器代理订阅相关主题。3)发布者向服务器代理发布主题信息。4)服务器代理想所有订阅该主题的订阅者推送消息。

MQTT有C/C++语言和JAVA包实现。需要明确的是,MQTT更适用于设备终端和手机APP socket通信,而不能支持浏览器使用。如果要支持微信浏览器应用,还需要增加类似WebsocketServlet技术给浏览器提供支持,这时MQTT以JS接口进行封装,并被调用完成消息推送。

5.CoAP

CoAP是受限制的应用协议(ConstrainedApplication Protocol)的代名词。其基于UDP协议,也就是在设备终端上只需要底层实现UDP协议,而不需要实现较为复杂的TCP协议。这种协议用得比较小。笔者也没有用C语言模拟过,就不展开了。

本文原创发布于慕课网手记,作者:阳光的小海豚,点击下方“了解更多”即可查看原文,转载请注明出处,谢谢合作!

快三大小单双稳赚买法经支持Websocket API。

1)为了能够兼容浏览器HTTP协议,Websocket规定在第一次发起请求时依然要发出符合HTTP协议规范的Header,但其Connection域的值是Upgrade,并增加Upgrade域,值是socket,即告知服务器,即将建立的通信是Websocket双向通信。服务器如果接受,会返回101给客户端进行协议切换。2)接下来的通信将不再以HTTP作为传输协议,而是使用Websocket规定的数据格式进行通信,其分为控制帧和数据帧。控制帧是发出心跳帧(ping),而服务器响应pong,还有结束帧;数据帧就是真实数据格式,其格式头只有6个字节(2个字节头和4个字节的掩码),后面就是真实的数据(经过掩码转换)。比HTTP格式头的长度要jldhy了。3)客户端和服务器之间是一直保持连接,直到close,当前期间要发发2个字节的3字节的ping帧。

可见Websocket比ajax有了极大的改进。其不仅省掉经常要连接握手,还简化的协议的格式,最重要的是实时性得到保证,因为双方是真正的全双工通信。

微信浏览器客户端支持Websocket,服务器使用Tomcat7以上的WebsocketServlet类,设备端要根据Websocket协议用C语言来模拟通信。

我们在用设备端模拟Websocket通信协议时一般会先看协议,再用HttpWatch等工具来抓包,抓到的头是GET ws://ip:port/path,如果在C语言也是这样模拟发包则会报400 bad request。因为C语言利用socket建立通信时已经利用了IP和port了,其发的第一个包的头是GET/path即可,不能在其前面加上ws://ip:port/。

4.MQTT

以上的分析都是将移动互联网的技术运用到物联网,其都有一个特定就是建立连接时会传送URL地址,由两个角色是客户端和服务器,这种架构我们一般称为是RESTful架构(另外,还有SOAP 面向应用的web services架构)。RESTful架构在互联网得到越来越广泛的运用,但物联网除了互联之外,还有其独有的特征,就是其终端设备的资源有限、低功耗运用场景、网络连接环境差(时不时断开连接)等。用C语言模拟的方式来使用RESTful架构(如Websocket)会使得终端的负荷较重,而且服务器发给终端设备的消息有可能因为断开连接而收不到。

MQTT是IBM针对物联网退出的一种轻量级协议,建立于TCP/IP层协议之上。其是物联网的重要组成部分,可能会成为物联网的事实标准。其具有QoS,能够缓冲消息,并通过重传机制保证终端设备收到消息;其消息格式极其简化,最短是两个字节;其提供订阅和发布模式,高效推送消息。

MQTT有三个角色,包括服务器代理、订阅者和发布者。

1)启动服务器代理。2)订阅者向服务器代理订阅相关主题。3)发布者向服务器代理发布主题信息。4)服务器代理想所有订阅该主题的订阅者推送消息。

MQTT有C/C++语言和JAVA包实现。需要明确的是,MQTT更适用于设备终端和手机APP socket通信,而不能支持浏览器使用。如果要支持微信浏览器应用,还需要增加类似WebsocketServlet技术给浏览器提供支持,这时MQTT以JS接口进行封装,并被调用完成消息推送。

5.CoAP

CoAP是受限制的应用协议(ConstrainedApplication Protocol)的代名词。其基于UDP协议,也就是在设备终端上只需要底层实现UDP协议,而不需要实现较为复杂的TCP协议。这种协议用得比较小。笔者也没有用C语言模拟过,就不展开了。

本文原创发布于慕课网手记,作者:阳光的小海豚,点击下方“了解更多”即可查看原文,转载请注明出处,谢谢合作!

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注