廖海波,杜 亮,鄭方雄,沈心怡,蔣 媛
(重慶郵電大學 工業物聯網與網絡化控制教育部重點實驗室,重慶 400065)
WebSocket在智能家居遠程監測系統中的研究與應用
廖海波,杜 亮,鄭方雄,沈心怡,蔣 媛
(重慶郵電大學 工業物聯網與網絡化控制教育部重點實驗室,重慶 400065)
為了改善目前智能家居Web應用數據交互的實時性和帶寬資源浪費的問題,通過對Ajax輪詢技術與WebSocket技術在B/S模型下性能分析比較,提出在智能家居遠程監測系統中引用WebSoket技術進行數據交互的方法,從而實現Web端數據的實時更新顯示。并在實例中通過JAVA后臺技術實現數據的可靠傳輸,證明了此方法的可行性。
智能家居;WebSocket; 輪詢;JAVA后臺
隨著Web3.0的到來,HTML5的飛速發展,瀏覽器的功能日益增強,Web應用的流暢性和用戶體驗性已越來越不輸原生的APP應用[1-2],再加上Web應用天然的跨平臺性和服務器動態更新功能,使得基于B/S模型的智能家居Web應用成為未來智能家居應用主流模式的可能。智能家居Web應用的重要部分之一是數據呈現的實時性[3-5],在已往的Web應用設計之中通常使用Ajax來進行數據的實時更新,但這種通過輪詢(Polling)來不斷請求服務器應答的方式會造成大量的資源浪費,特別是每次HTTP請求的HEADER會占用很多的帶寬,對整個Web應用的性能會產生一定的影響[6]。因此,本文引進了一種新的前后臺交互技術——WebSocket,來解決Ajax產生的不足,進而提高智能家居Web應用的性能。
WebSocket是由HTML5提供的用于Web端與服務端之間全雙工通信的網絡通信技術。
2011年,互聯網工程任務組(IETF)標準化了WebSocket協議并寫入RFC6455草案中,萬維網聯盟(W3C)標準化了WebSocket協議在HTML5規范中的API接口[7]。WebSocket的使用非常靈巧,Web端與服務端只需進行一次簡單的握手連接,它們之間就形成一條專用通道,兩者就可以直接進行數據互相傳送。
傳統的提供Web應用實時數據更新的方法主要有輪詢和其他的服務器推送技術,比較流行的是Comnet技術。Comnet通常利用長輪詢(Long polling)或流連接策略將半雙工通信模擬成HTTP上的全雙工通信。雖然這種模擬的全雙工通信實現了數據的實時性,但是實時數據是不可預測的,不可避免地會產生一些不必要的請求,造成大量的資源浪費。而WebSocket是基于事件觸發的全雙工通信網絡技術,它比輪詢有更小的延時,從而擁有更高的實時性。
WebSocket與輪詢之間的延時對比如圖1所示。從圖1可以看出,輪詢方式每次響應消息之前都必須進行一次請求,每次請求都將消耗額外的時間。而在WebSocket方式下,服務端與Web端只需進行一次請求握手連接,連接成功之后,Web端就可以在不用請求服務的情況下獲得服務端發送的消息。
2.1 系統結構
智能家居遠程監測系統主要由智能醫療、家電控制、環境監測、安防報警和能耗管理[8-9]五大部分組成。各底層傳感器設備通過無線傳感器協議(ZigBee、6LowPan等)將數據上傳給家庭網關,家庭網關通過Socket通信將數據轉發給服務器,服務器則將數據進行分析保存到數據庫中,并作Web發布或消息推送給手機APP。系統結構如圖2所示。

圖1 WebSocket與Polling延時對比圖

圖3 服務端與Web端交互流程圖

圖2 智能家居系統結構圖
2.2 WebSocket實時數據更新設計
智能家居遠程監測系統需要進行實時更新的數據有智能醫療類的人體檢測數據、能耗數據、環境類數據和安防類數據。傳統的基于Ajax的輪詢方式進行更新數據需要后臺程序將接收到的數據首先存入數據庫,當前端發過來HTTP請求之后,再從數據庫中取出數據并封裝成XML或Json的格式傳回前端頁面。而WebSocket技術只需要服務器與瀏覽器建立WebSocket連接,當有數據接收到時即可將接收到的數據推送給Web端。這就省去了數據先入庫再讀取消耗的時間,增強了數據實時性。
為了實現WebSocket通信,系統使用JAVA編程語言編寫WebSocket的服務端程序。在設計過程中,采用映射內存的方式實現進程間的數據共享;使用JAVA多線程連接技術,監聽來自Web端WebSocket對象的連接請求。當Web端向服務端發出一個連接請求時,服務端需要解析Web端的WebSocket握手信息,將HTTP協議升級到WebSocket協議并向客戶端返回應答信息。服務端與Web端交互流程如圖3所示。
整個系統由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事件,從而更新頁面數據。
3.1 應用實現
為了驗證WebSokcet實現實時數據更新方法的可行性,系統服務端配置為:Pentium 4處理器、CPU 主頻 2.9 GHz、內存3.38 GB、操作系統為Windows 7、JDK 7、Web服務器為Tomcat 8。并以重慶郵電大學智能家居系統為基礎,采集能耗數據,Web界面家庭能耗數據如圖4所示。

圖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輪詢明顯占用了更小的帶寬。

圖5 Ajax與WebSocket帶寬對比圖
本文通過分析傳統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.
Research and application of WebSocket technique in smart home remote monitoring system
Liao Haibo,Du Liang,Zheng Fangxiong,Shen Xinyi,Jiang Yuan
(Key Laboratory of Network Control and Industrial Things of Ministry of Education,Chongqing University of Posts and Telecommunications, Chongqing 400065, China)
In order to improve the problem of data real-time interaction and the waste of bandwidth resources in web application of smart home furnishing, the paper uses WebSocket technology by comparing the performance of Ajax polling technology and WebSocket technology in B/S module to update the real-time data interaction in smart home web application. And the feasibility of this method is proved by the example of JAVA background technology.
smart home; WebSocket; polling; JAVA background
TP79
A
10.19358/j.issn.1674- 7720.2017.07.004
廖海波,杜亮,鄭方雄,等.WebSocket在智能家居遠程監測系統中的研究與應用[J].微型機與應用,2017,36(7):12-14,18.
2016-12-05)
廖海波(1990-),男,碩士研究生,主要研究方向:智能家居。
杜亮(1991-),男,碩士研究生,主要研究方向:JAVA服務器開發。
鄭方雄(1994-),男,碩士研究生,主要研究方向:Web前端開發。