项目具体内容是: 收集海量终端设备(传感器)的数据,即时上传到物联网云平台(需要自己构建),在上面完成数据分析和处理,并推送到移动终端上。 从开发角度讲,整个项目主要包括以下几部分内容: - 无线接入(设备端)
- 网关
- 身份设备管理+数据分析+消息推送(云端)
- 前端开发(手机)
物联网简介物联网,Internet of Things,顾名思义就是基于互联网基础上的物与物的“连接”。这其中涉及到两层含义,一是物联网构建在互联网基础之上,二是可连接之物的范围大大增加,甚至可以说是任何物品。在2017年10月召开的中国计算机大会上,梅宏院士作的报告中就有提到“万物皆可互联”。所谓“连接”本质上就是信息交换和通信。 如下图是物联网系统的架构示意图。
从应用的角度出发,物联网系统可分解为物联设备、网关、云端、用户终端。 物联设备可分为两类,一种因其支持TCP/IP,可以直接接入物联网,如wifi、GPRS/3G/4G等,一种则需要网关(实现协议转换),如zigbee,蓝牙等。 实际上,对于一些场景,比如终端设备通过蓝牙通信的话,则手机本身就相当于网关。笔者的项目中,设备与手机之间通过蓝牙通信,终端数据通过手机的wifi或者3G/4G模块与云端通信。因此只需专注于云端服务的开发上。 “协议”在介绍云端消息推送服务需要用到的协议之前,鉴于笔者经常混淆各类协议,后来看到OSI七层结构时,茅塞顿开。原来平时所谓不同的协议是针对不同层讨论的,将不同层之间的协议放在一起讨论对比是初学者最容易犯的错误。 在此,简单介绍下OSI七层结构,熟悉的读者可自行跳过。 OSI是一个开放性的通信系统互连参考模型,是一个定义得非常好的协议规范。OSI模型有7层结构,每层都可以有几个子层。 OSI的7层从上到下分别是 - 7应用层
- 6表示层
- 5会话层
- 4传输层
- 3 网络层
- 2数据链路层
- 1物理层
其中高层(即7、6、5、4层)定义了应用程序的功能,下面3层(即3、2、1层)主要面向通过网络的端到端的数据流。 相关说明,这篇帖子说的很详细。笔者在这里贴出其中一张表,方便读者有一个直观的认识。
回到刚才的问题,消息推送服务建立在应用层协议上。常见的有HTTP、Websocket、MQTT、CoAP等。 下面对这几种常见的消息推送技术作简要介绍。 1.HTTP与HTTPs 这是一种B/S通信模式。浏览器通过http协议的url向服务器发起请求,服务器将url对应的html内容回传给浏览器。至于具体如何请求,解析以及回传,包括https涉及的加密等,可参见 回到之前的应用上,基于HTTP协议,云端只需使用相应技术设计前端网页。手机需要模拟HTTP协议向服务器发送请求,一般情况下,请求格式为xml或者json。云端接受请求后,使用Http协议的servlet进行响应,返回xml或json格式的消息。 从上面的描述中看出,这种通信方式的缺点也就是它的工作方式:请求——响应。云端不会主动向客户端推送消息,是一种单向通信方式。 在物联网领域往往需要双向通信,需要云端主动向终端发送消息,这里的终端既可以指手机等人机接口,也可以指云控制系统中的执行机构或具有自动控制功能的传感器网络。 举个例子,比如一个LED灯监测系统,灯的状态作为数据上传到云端,同时云端也可以根据需求远程改变灯的状态。 2.WebSocket 鉴于HTTP协议单工通信的在一些应用上的不足,工程师们发明了WebSocket。维基百科介绍如下: WebSocket是一种在单个TCP连接上进行全双工通讯的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 这里多插一句,为了改进http协议的不足之处,还有其它相应的技术,如Ajax轮询等。在此不做进一步阐述。
|