魏江東 涂繼輝 賴少東 高夢然



摘 ?要: 針對物聯網系統中監控移動目標位置和軌跡信息的需求,設計和實現了一種基于Websocket和Redis移動目標軌跡跟蹤系統。該系統主要分為三個部分:首先利用手機App客戶端采集移動目標的軌跡信息,然后利用Webocket將軌跡信息傳輸到遠程服務器進行保存,最后服務端將傳送的軌跡信息保存在Redis+MySQL數據庫中,并根據客戶需要實現軌跡信息的查詢和在地圖上進行軌跡重現。經過測試表明,該系統能夠準確、實時地獲取移動目標的軌跡信息,并進行有效的存儲,這為物聯網移動目標的軌跡跟蹤提供了較好的解決方案。
關鍵詞: 移動目標跟蹤; WebSocket; 軌跡重現; Redis
中圖分類號:TN919.3;TP311.1 ? ? ? ? ?文獻標識碼:A ? ? 文章編號:1006-8228(2021)08-76-05
Design and implementation of moving target tracking system
based on WebSocket and Redis
Wei Jiangdong, Tu Jihui, Lai Shaodong, Gao Mengran
(Electronic Information Collage of Yangtze University, Jingzhou, Hubei 434023, China)
Abstract: In response to the need to monitor the location and trajectory information of moving targets in the Internet of Things system, a moving target trajectory tracking system is designed and implemented based on Websocket and Redis. The system includes three parts, collecting the trajectory information of the moving target by using the mobile App client, transmitting the trajectory information to the remote server for storage by using Webocket and saving the transmitted trajectory information in the server with Redis+MySQL database, which realizes the tracking information query and the trajectory replay on map according to the needs of customer. Tests show that the system can accurately obtain the trajectory information of the moving target in real time and store it effectively, which provides a better solution for the trajectory tracking of moving target in the Internet of Things system.
Key words: moving target tracking; WebSocket; trajectory replay; Redis
0 引言
物聯網作為新一代互聯網信息技術已經應用到我們生活中的各個領域,而移動目標的軌跡信息跟蹤和監控是物聯網技術中非常重要的環節,它能較好的了解物聯網中終端節點的位置信息以及移動情況,因此,實時、準確和高效地對移動目標軌跡信息進行跟蹤和保存是物聯網系統研究的熱點。
目前應用廣泛的移動目標軌跡跟蹤系統多以車載GPS終端與基于B/S的Web方式實現,系統中傳統的HTTP請求方式帶來了大量的無效請求,造成了服務器資源的不必要開銷,同時,傳統的MySQL數據庫存取數據較慢,交互方式存在一定的延遲,而基于PC端查詢物流、巡邏等工作移動目標軌跡跟蹤的系統,無法滿足用戶實時性、便攜性的需求,小規模企業與零散客戶也難以承擔類似系統的開發成本[1-2]。
針對以上問題,本文設計并實現了基于WebSocket和Redis的移動目標軌跡跟蹤系統,以Android App作為客戶端,提高了系統在物聯網中使用的便捷性,實現了高效的通信機制與數據存儲方式。
1 系統總體結構設計
本文設計的移動目標軌跡跟蹤系統如圖1所示,整個系統主要分為三個部分:移動目標軌跡采集和顯示模塊、數據傳輸和接收模塊以及服務端存儲模塊。移動目標軌跡采集和顯示模塊主要是在Android平臺利用手機App結合百度地圖實現,數據傳輸和接收模塊主要是利用WebSocket方式進行通信,服務端采用Redis+MySQL數據庫進行數據的存儲。系統總體結構如圖1所示。
2 系統具體實現
2.1 移動終端模塊實現
移動終端作為用戶與物聯網移動目標軌跡跟蹤系統交互的入口,選擇Android App作為客戶端,需要實現用戶信息、照片處理和軌跡跟蹤三個功能模塊。三個功能模塊的UI界面設計都是采用Android基本布局中的相對布局RelativeLayout、線性布局LinearLayout、表格布局TableLayout相結合的形式。客戶端的功能模塊如圖2所示。
在用戶信息模塊中,包括用戶注冊、登錄、個人信息編輯。用戶注冊時,先填寫個人信息,然后客戶端將用戶信息提交到服務器,服務器判斷數據庫中用戶表中是否已存在該賬戶,若存在,則顯示“該用戶名已存在,請修改”,若不存在,則新增用戶到數據庫中。用戶登錄時,用戶需提前設置服務器地址及端口,當用戶登錄后,客戶端將登錄信息發送至服務器,由服務器與數據庫交互核對數據并給予反饋。個人信息編輯則是對個人信息的完善,比如上傳圖片、填寫地域信息等。
照片處理模塊為用戶在移動過程中,通過拍照或上傳相冊照片來主動反饋自己的位置信息。此模塊實現了拍照加載圖片、本地照片加載、圖片裁剪處理與圖片上傳功能。圖片的加載部分都是先通過裁剪圖片的uri獲取Bitmap對象,然后使用ImageView組件的方法setImageBitmap()將圖片加載顯示出來。圖片的裁剪處理采用android系統自帶的裁剪功能,通過intent.putExtra設置合適的裁剪框形狀和大小。同時,本文借助了網絡請求庫OkHttp,使用HTTP協議的POST方法實現圖片上傳功能。
軌跡跟蹤模塊主要是依托百度地圖SDK [3]進行開發。在使用百度地圖免費API接口提供的各種功能之前,先要在百度地圖官網申請一個百度地圖開發密鑰,才能在程序中使用百度地圖提供的地圖服務、定位服務及數據服務等。在滿足實時定位的基本功能后,該模塊的關鍵問題是對軌跡點信息的采集,本文利用百度地圖SDK自定義一個定位監聽類LocationListener,并實現其中的方法來獲取用戶的位置。其中,定位方式有網絡定位和GPS定位兩種,使得定位更加精確。而對于移動目標軌跡點的采集時間,本文設置為每隔一秒采集一次,主要考慮其時間過長導致軌跡不夠完整,過短則造成采集頻繁,產生不必要的數據消耗。定位中利用location.getLatitude()、location.getLongitude()方法分別獲取該軌跡點的緯度和經度,最后將所有的軌跡點信息保存到點集合List中。當用戶提交軌跡信息時,使用WebSocket協議上傳到服務器,服務器將軌跡信息保存到Redis數據庫中[4]。軌跡重現主要是服務器將數據庫中獲取類型為List的軌跡信息點集合發送給客戶端,然后通過客戶端創建地圖覆蓋物OverlayOptions對象來設置繪制折線的相關屬性,并將軌跡點添加到地圖上,同時將這些軌跡點依次使用折線相連,在百度地圖上進行繪制,最終實現物聯網中移動目標的軌跡重現。
為了優化客戶端與服務端之間的通信,減少HTTP協議的無效請求[5],本系統的通信協議主要采用WebSocket協議[6]。WebSocket是一款html5推出的協議標準,它是一種在單個TCP連接上進行全雙工通信的協議[7],解決了傳統Ajax輪詢、Comet技術的弊端,它能主動使服務器向客戶端推送消息,解決了服務器資源消耗的問題[8]。在構建客戶端的WebSocket接口時,本文采用WebSocket的開源框架Java-WebSocket。首先創建一個WebSocketClient類對象,然后重寫該類中的四個方法onOpen()、onMessage()、onClose()、onError(),分別在WebSocket連接開啟時、接收消息時、連接斷開時,以及連接出錯時調用。重寫的onMessage()方法中包含客戶端上傳信息至服務端以及處理服務端反饋的代碼,其中客戶端上傳的字符串信息需要轉化為更加輕量、簡潔的Json格式進行傳輸,同時自定義了java bean類以方便客戶端對Json信息進行解析。對于服務端的接口,本文采用高性能的PHP Socket服務框架Workerman進行構建。在加載完Workerman的相關文件后,創建一個Worker對象,搭建起移動終端與服務端之間的通道,然后調用函數onMessage與客戶端進行通信。
2.2 服務端的實現
服務端主要包括PHP服務器和Redis+MySQL數據庫兩部分。
PHP服務器部分主要是對客戶端傳來的數據進行處理和反饋,同時與Redis數據庫交互,實現對數據的存取,然后將數據持久化到MySQL當中。客戶端傳來的請求主要分為五類,分別是注冊信息的存儲、登錄信息的驗證、軌跡信息的存儲、軌跡信息的查詢以及圖片的上傳。如圖3所示,客戶端的每種請求對應一種狀態state,然后服務器根據傳入的狀態調用相應的方法對請求進行處理。同時為了防止用戶密碼信息泄露,本文還對用戶密碼使用了Crypt加密。
Redis+MySQL數據庫部分負責對數據進行緩存并實現持久化,首先Redis是基于內存的數據庫[9],讀取速度快,同時其支持的數據結構很適合軌跡信息的存儲,因此將系統的熱點軌跡信息緩存其中,能夠大幅度提升系統的性能;然后,將重要的數據存放于MySQL數據庫中實現持久化,防止由于Redis數據庫帶來的內存增長速度過快,達到最大內存限制,從而導致的數據丟失。對于Redis數據庫,本文針對用戶信息和軌跡信息的特點,分別采用字符串和hash數據結構來緩存數據[10]。用戶信息的存儲結構模型如圖4所示,鍵users:count采用字符串結構記錄用戶的個數;鍵user.to.id采用hash結構,作用是記錄用戶名和id之間的映射關系;鍵user:id也是采用hash結構保存用戶的詳細信息,包含用戶名、密碼、email、車牌號等,其中存儲的密碼是加密后的結果。軌跡信息的存儲結構模型如圖5所示,鍵tracks:count采用字符串結構保存軌跡信息的個數;鍵track:id采用hash結構,存儲著軌跡信息的名稱、提交時間、所屬用戶的id、軌跡點坐標等。對于重要或者訪問不頻繁的數據,我們將其持久化到MySQL數據庫中,以varchar類型進行存儲,從而能夠容納更多的數據,同時保證數據存儲的可靠性。
3 系統測試
3.1 測試環境
在整個測試中安排了50名大學生進行參與,學生以自行車騎行的方式自由繞行整個校園參與測試。對于客戶端,測試過程中采用版本Android 7.1的智能手機,而服務端的系統設計環境為Centos 7操作系統,開發工具為PHP 5.6+Redis 5.0+MySQL 5.7,兩者通過4G網絡進行通信。
3.2 測試結果
移動目標軌跡跟蹤系統的移動終端部分操作界面如圖6所示。
圖6(a)是終端的登錄界面,用戶在填寫服務器地址后,輸入賬號和密碼登錄。圖6(b)是登錄成功后跳轉到地圖界面,實時顯示當前位置為經度112.219674,緯度30.33881,用戶點擊地圖界面左下方的開始按鈕進行軌跡記錄,然后點擊結束來命名軌跡并提交給服務端,若用戶需要查看軌跡,只需在上方的搜索框進行搜索,此次保存的軌跡信息為(112.219674 30.33881|112.219754 30.338599|112.219830 30.33827…),并在地圖上實現軌跡的重現,如圖6(c)所示。
經過反復實驗,用戶系統的客戶端界面操作性好,功能完善,測試人員可以通過此系統了解物聯網中移動目標的實時位置,掌握目標的軌跡路線,極大幫助了管理人員對移動目標軌跡路線的評估與分析。
4 結束語
本文設計和實現的移動目標軌跡跟蹤系統,以WebSocket協議和Redis數據庫為基礎,解決了物聯網系統中管理人員對移動目標實時位置和軌跡路線掌握難的問題。考慮到現有市場安卓手機的占有率,該系統以Android App為移動客戶端,實現了高效的PHP服務器,同時結合了HTTP協議來解決客戶端與服務端之間的實時性雙向通信問題。經過測試,該系統并發量高,交互性強,操作簡便,為物聯網中移動目標的實時定位和軌跡監測提供了解決方案,具有良好的市場應用前景。
參考文獻(References):
[1] 張舒.面向公路物流的車輛追蹤系統設計、實現與優化[D].南京理工大學,2018.
[2] 鐘波,陶智勇.基于WebSocket的車輛GPS信息實時推送系統的實現[J].電子設計工程,2017.25(13):48-52
[3] 滿紅任.基于Android平臺的車道偏離預警系統的實現[D].東南大學,2015.
[4] Xiongfei Liu,Jiakang Liu,Beiping Liao,Yunyi Zhu,Huimin
Liu. Design of IoT Web Server Communication Platform based on Netty and WebSocket[A]. Wuhan Zhicheng Times Cultural Development Co.,Ltd.Proceedings of 3rd International Conference on Mechatronics Engineering and Information Technology(ICMEIT 2019)[C].Wuhan Zhicheng Times Cultural Development Co,2019:7.
[5] 覃家皓.基于WebSocket的即時通信研究及其性能分析[J].移動通信,2017.41(12):44-48
[6] 李先懿,郭正光.基于Websocket的車聯網報警推送系統[J].計算機系統應用,2020.29(3):127-131
[7] Benfano Soewito, Christian, Fergyanto E. Gunawan, et al.Websocket to Support Real Time Smart Home Applications,2019.157:560-566
[8] 惠苗,賴道健.基于WebSocket協議的即時通訊系統的開發[J].榆林學院學報:自然科學版,2019.29(6):76-79
[9] 馬豫星.Redis數據庫特性分析[J].物聯網技術,2015.5(3):105-106
[10] 曾超宇,李金香.Redis在高速緩存系統中的應用[J].微型機與應用,2013.32(12):11-13
[11] 涂繼輝,趙劍.基于WebService的通信實驗設備排隊系統設計與實現[J].長江大學學報:自然科學版,2015.12(10):44-47,4
[12] 李明珠.基于Android手機的軌跡導航系統的設計與實現[D].長安大學,2013.
[13] 郝帥,程德福.基于Android的航跡指示儀的設計與實現[J].湘潭大學自然科學學報,2018.40(2):50-53
收稿日期:2021-02-04
基金項目:國家自然科學基金(No.61901059);湖北省高等學校大學生創新創業訓練計劃項目(2019)
作者簡介:魏江東(1996-),男,湖北宜昌人,碩士研究生,主要研究方向:深度學習,模式識別,自然語言處理。
通信作者:涂繼輝(1979-),男,湖北武漢人,博士,副教授,主要研究方向:圖像處理與模式識別,深度學習,計算機網絡。