WebSocket在智能家居远程监测系统中的研究与应用

0引言

  随着Web3.0的到来,HTML5的飞速发展,浏览器的功能日益增强,Web应用的流畅性和用户体验性已越来越不输原生的APP应用[1],再加上Web应用天然的跨平台性和服务器动态更新功能,使得基于B/S模型的智能家居Web应用成为未来智能家居应用主流模式的可能。智能家居Web应用的重要部分之一是数据呈现的实时性[3],在已往的Web应用设计之中通常使用Ajax来进行数据的实时更新,但这种通过轮询(Polling)来不断请求服务器应答的方式会造成大量的资源浪费,特别是每次HTTP请求的HEADER会占用很多的带宽,对整个Web应用的性能会产生一定的影响[6]。因此,本文引进了一种新的前后台交互技术——WebSocket,来解决Ajax产生的不足,进而提高智能家居Web应用的性能。

1WebSocket概述

  WebSocket是由HTML5提供的用于Web端与服务端之间全双工通信的网络通信技术。

  2011年,互联网工程任务组(IETF)标准化了WebSocket协议并写入RFC6455草案中,万维网联盟(W3C)标准化了WebSocket协议在HTML5规范中的API接口[7]。WebSocket的使用非常灵巧,Web端与服务端只需进行一次简单的握手连接,它们之间就形成一条专用通道,两者就可以直接进行数据互相传送。

  传统的提供Web应用实时数据更新的方法主要有轮询和其他的服务器推送技术,比较流行的是Comnet技术。Comnet通常利用长轮询(Long polling)或流连接策略将半双工通信模拟成HTTP上的全双工通信。虽然这种模拟的全双工通信实现了数据的实时性,但是实时数据是不可预测的,不可避免地会产生一些不必要的请求,造成大量的资源浪费。而WebSocket是基于事件触发的全双工通信网络技术,它比轮询有更小的延时,从而拥有更高的实时性。

webSocket与Polling延时对比图

WebSocket与轮询之间的延时对比如图1所示。从图1可以看出,轮询方式每次响应消息之前都必须进行一次请求,每次请求都将消耗额外的时间。而在WebSocket方式下,服务端与Web端只需进行一次请求握手连接,连接成功之后,Web端就可以在不用请求服务的情况下获得服务端发送的消息。

2WebSocket应用设计

  2.1系统结构

  智能家居远程监测系统主要由智能医疗、家电控制、环境监测、安防报警和能耗管理[8 9]五大部分组成。各底层传感器设备通过无线传感器协议(ZigBee、6LowPan等)将数据上传图1WebSocket与Polling延时对比图给家庭网关,家庭网关通过Socket通信将数据转发给服务器,服务器则将数据进行分析保存到数据库中,并作Web发布或消息推送给手机APP。系统结构如图2所示

图片发自简书App

2.2WebSocket实时数据更新设计

  智能家居远程监测系统需要进行实时更新的数据有智能医疗类的人体检测数据、能耗数据、环境类数据和安防类数据。传统的基于Ajax的轮询方式进行更新数据需要后台程序将接收到的数据首先存入数据库,当前端发过来HTTP请求之后,再从数据库中取出数据并封装成XML或Json的格式传回前端页面。而WebSocket技术只需要服务器与浏览器建立WebSocket连接,当有数据接收到时即可将接收到的数据推送给Web端。这就省去了数据先入库再读取消耗的时间,增强了数据实时性。

  为了实现WebSocket通信,系统使用JAVA编程语言编写WebSocket的服务端程序。在设计过程中,采用映射内存的方式实现进程间的数据共享;使用JAVA多线程连接技术,监听来自Web端WebSocket对象的连接请求。当Web端向服务端发出一个连接请求时,服务端需要解析Web端的WebSocket握手信息,将HTTP协议升级到WebSocket协议并向客户端返回应答信息。服务端与Web端交互流程如图3所示。

图片发自简书App

整个系统由Web端、WebSocket服务端和UDPServer服务端三部分组成。UDPServer开始执行后将通过阻塞的方式接收来自家庭网关发来的数据,并将数据进行解析,重要的数据将保存到数据库作历史查询,实时数据则封装成Json数据格式保存在内存映射中,内存映射中的数据供WebSocket服务端读取。Web端在页面加载完毕后初始化WebSocket接口并创建与服务器端WebSocket的连接,此时在Web端会绑定4个方法用于响应4种不同的事件(onopen事件、onmessage事件、onerror事件和onclose事件),而在服务端则会生成一个WebSocket对象并初始化一个用于监听Web发送消息的方法。在建立连接之后,Web端就会触发onopen事件,并向服务端发送一条消息,Websocket服务端监听到消息之后从内存映射中取出实时的Json数据,并向Web端发送消息,Web端在接收到消息之后触发onmessage事件,从而更新页面数据。

3Websocket应用的实现和测试

  3.1应用实现

  为了验证WebSokcet实现实时数据更新方法的可行性,系统服务端配置为:Pentium 4处理器、CPU 主频 2.9 GHz、内存3.38 GB、操作系统为Windows 7、JDK 7、Web服务器为Tomcat 8。并以重庆邮电大学智能家居系统为基础,采集能耗数据,Web界面家庭能耗数据如图4所示。

图片发自简书App

 图4智能家居能耗数据Web界面打开页面之后,Web端通过var WebSocket =new WebSocket('ws:// 172.22.140.111:8080/WebSocket/websocketT')与服务端WebSocketServer建立连接。其中ws表示采用的WebSocket协议,172.22.140.111表示服务端IP地址,8080表示服务端对应的端口,“WebSocket/websocketT”表示WebSokcet的MAP。建立连接后,Web端和服务端就可以直接进行通信。Web端接收到数据后触发onMassege()方法,在此方法中通过var data = event.data 得到数据,由于得到的数据是String格式,所以还必须通过var JsonObject= eval("(" + data + ")") 将数据封装为Json数据格式,最后就可以利用DOM模型得到相应的数据并在相应的位置显示出来。

  3.2应用测试验证

  由于WebSocket是全双工通信方式,其实时性大于Ajax轮询,所以本文只对两种方式带宽占用的情况进行测试验证。为了体现测试的公平性,两种方法都搭建在同一个智能家居平台上,采集相同的数据,且数据上传的周期一定。测试工具为WebServer Stress Tool 7。测试结果如图5如示,从图中可以看出,WebScocket比Ajax轮询明显占用了更小的带宽。

图片发自简书App

4结论

  本文通过分析传统Web应用的前后台数据交互中存在的缺点和局限,提出了智能家居远程监测系统中应用WebSocket技术的方案。并在基于JAVA语言编写的后台程序下实现了WebSocket技术在服务端和Web端之间的全双工通信,最后通过在同一平台上的测试,验证了WebSocket拥有更高的实时性和更低的带宽占用。为智能家居远程监测系统数据更新的方法提出了一种新的尝试。

  参考文献

  [1] 韩安.HTML5 WebSocket技术研究[J]. 电子世界,2013(20):5-6.

  [2] 赵鑫,朱一群. 基于Android智能手机的智能家居监控系统设计与实现[J]. 硅谷,2013(16):29-31.

  [3] 鹿海磊. 基于Web of Things技术的应用关键技术及案例分析[D].北京:北京邮电大学,2013.

  [4] 闫石. 基于嵌入式B/S架构的智能家居远程监控系统开发[D].南京:南京理工大学,2014.

  [5] 吴胜兵. 智能家居信息管理系统的研究[D].长春:吉林大学,2014.

  [6] 吴晓东,王鹏. Html5的通信机制及效率的研究[J].长春理工大学学报(自然科学版),2011,34(4):159-163.

  [7] 丁磊. 基于WebSocket的消息推送系统设计与事件匹配技术研究[D].北京:北京邮电大学,2014.

  [8] 付蔚,刘谋黎,蔡林沁. 智能家居系统嵌入式家庭服务器设计与实现[J]. 自动化与仪表,2013,28(4):37-40.

  [9] 陈博,付蔚,薛震,等. 智能家居虚拟场景设计与实现[J]. 物联网技术,2014(3):66-69.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容