1、sensor文件夹中为传感器端运行的上位机程序,以C#实现可调用http接口桌面程序,该桌面程序使用USB2TTl连接传感器将传感器的数值全部读取并做字符串处理,然后调用服务器的接口上传;
2、springboot-iot中是一个springboot项目,提供http接口供sensor和actuator调用,有以下几个API
-
新增记录:GET : host:8080/upload/{value}
在数据库中新增一条记录存储url路径参数‘value’,并返回一个Response,新增成功返回状态码和新增的JSON数据,失败返回状态码和错误信息,供sensor使用,只支持HTTP-GET方法,一般来说,这里是新增数据应该使用POST方法才符合RESTFul风格,但是考虑到如果该项目真正实现的话传感器时刻都会有海量的数据上传至服务器而POST使用的协议是TCP相比GET的UDP协议的安全性可靠性较高但缺点是传输速率会慢不少,考虑到传感器的数据依赖的是速度而不少安全、可靠性,这里使用了GET方法;
-
查看数据:GET : host:8080/
这是展示传感器信息的接口,可以查看所有传感器实时的数据和状态,因为需要做实时展示,所有考虑了三种方案: (1) 服务器推送 HTTP推送技术(Server Push)的基础思想是将浏览器主动查询信息改为服务器主动发送信息。服务器发送一批数据,浏览器显示这些数据,同时保证与服务 器的连接。当服务器需要再次发送一批数据时,浏览器显示数据并保持连接。实现这种方法的话可以在访问‘GET : host:8080/’接口后服务器对Session建 立起长连接,随后将所有传感器数据定时推送,但是这种方式会使服务器压力很大,而且还有浏览器缓存的问题,所以不采用; (2) 客户端轮询请求 在访问url的时的js代码里直接轮询ajax请求并展示,这里使用的是这种方法,这样也可以避免服务器推送浏览器的缓存问题,但同样的问题,如果多个用户 并发访问服务器会使服务器压力增大; (3) 消息队列 以一个消息中间件传递消息,访问url时即订阅消息,服务器将传感器新增数据的同时写一个消息进消息队列,浏览器收到消息展现数据,这种方法看起来是 能解决服务器压力的问题,但在这种海量数据的条件下性能并不如方式二,所以不采用。
3、actuator为动作执行器,访问服务器的接口,根据服务器的状态码决定执行什么命令,这里访问的是GET : host:8080/这个接口,但性能最高的方法是消息队列,actuator程序订阅消息,当检测到传感器的值发生变化需要actuator执行时发送一个消息到队列中,实现的成本较高,暂时没有使用而使用现成的接口。