畢麗靜 蔣保臣 王小利
摘要:隨著中國徹底進入移動互聯(lián)網(wǎng)時代,移動出行以其快捷便利的優(yōu)勢,迅猛發(fā)展。但是其后續(xù)保障建設(shè)的滯后導(dǎo)致了移動出行車輛缺乏統(tǒng)一的監(jiān)督管理平臺,安全事故頻發(fā)。該文基于Android和百度地圖開發(fā)平臺開發(fā)了一套移動出行監(jiān)測系統(tǒng),可同時實現(xiàn)1000輛車的信息管理、實時定位與跟蹤、歷史軌跡查詢和衛(wèi)星圖展示等功能。首先,通過GNSS模塊接收衛(wèi)星信號,并利用socket技術(shù)發(fā)送給服務(wù)器,經(jīng)服務(wù)器解析處理存入數(shù)據(jù)庫。然后,Android客戶端通過web服務(wù)器訪問數(shù)據(jù)庫,獲取車輛、衛(wèi)星信息,并在客戶端實時顯示。該監(jiān)控系統(tǒng)使用線程池模型改進生產(chǎn)者一消費者模式,解決大容量突發(fā)性數(shù)據(jù)請求造成的嚴重丟包率;采用動態(tài)建表的方式,將數(shù)據(jù)分時存儲在不同數(shù)據(jù)表中,解決了海量數(shù)據(jù)查詢效率低的問題;使用輕量級數(shù)據(jù)格式JsON,保證了Android客戶端與遠程數(shù)據(jù)庫之間的實時通信,并解決了手機流量消耗大的問題。經(jīng)驗證,該系統(tǒng)可高效、穩(wěn)定、長時間運行。
關(guān)鍵詞:移動出行;Android;實時監(jiān)測;生產(chǎn)者一消費者改進模式;動態(tài)建表;JSON
中圖分類號:TP311
文獻標識碼:A
文章編號:1009-3044(2017)10-0043-05
1.背景
近年,移動出行服務(wù),以其快捷便利的優(yōu)勢,迅速發(fā)展。乘客可以通過網(wǎng)上預(yù)約的方式叫車,不用在路邊等待,車主也能最快的獲得附近乘客的位置,節(jié)約了時間。專車和拼車的出現(xiàn),不僅減少了乘客花銷,也增加了車輛的利用率,減輕道路與環(huán)境的壓力。據(jù)艾瑞咨詢(iReseareh)發(fā)布的《2016年中國移動端出行服務(wù)市場研究報告》顯示,截至2015年底,中國移動端出行服務(wù)乘客端用戶數(shù)總計接近4億。其中網(wǎng)約車、專車與拼車的用戶覆蓋量最高。然而,《報告》數(shù)據(jù)還顯示,無論是專車還是拼車,皆有高達半成以上的用戶對移動出行存在的各類安全問題表示擔(dān)憂。尤其是最近頻發(fā)的乘客被車主搶劫、殺害的事件被報道出來,更是讓人們對移動出行的安全問題表示擔(dān)憂。車主只要在一些移動出行的公司進行注冊登記,就可以為乘客提供出行服務(wù),缺乏監(jiān)督管理,存在嚴重的安全隱患問題。移動出行市場的快速發(fā)展與其后續(xù)保障建設(shè)的滯后已形成鴻溝。所以,對移動出行車輛實行統(tǒng)一化監(jiān)督管理迫在眉睫。
本文設(shè)計了一套基于Android系統(tǒng)的車輛監(jiān)測系統(tǒng),對移動出行車輛進行監(jiān)督與管理。該系統(tǒng)主要是基于Android和百度地圖進行的二次開發(fā),實現(xiàn)了對移動出行車輛與駕駛員信息的管理,可以對車輛進行實時定位與跟蹤,以及歷史軌跡查詢,衛(wèi)星圖展示等。
2.系統(tǒng)方案設(shè)計
移動車輛監(jiān)測系統(tǒng)設(shè)計主要分為后臺服務(wù)器設(shè)計與An.droid客戶端設(shè)計。服務(wù)器設(shè)計主要解決數(shù)據(jù)采集與存儲問題。使用Trimble公司的GNSS模塊接收衛(wèi)星信號,然后利用socket技術(shù)將數(shù)據(jù)發(fā)送給服務(wù)器,經(jīng)解析處理存人數(shù)據(jù)庫MySQL。Android客戶端的設(shè)計主要解決Android客戶端的實時顯示以及數(shù)據(jù)的獲取。Android客戶端需要通過web服務(wù)器訪問數(shù)據(jù)庫,獲取用戶、車輛與衛(wèi)星數(shù)據(jù),然后通過JSON實現(xiàn)與Android客戶端的實時通信。該監(jiān)控系統(tǒng)可實現(xiàn)對車輛的信息管理、實時定位與跟蹤、歷史軌跡查詢、衛(wèi)星圖展示等功能。系統(tǒng)整體框架如圖1所示。
GNSS接收機與服務(wù)器之間利用socket TCP的方式進行通信。首先是socket服務(wù)器對端口進行監(jiān)聽,等待客戶端TCP連接請求。然后,GNSS接收機作為socket客戶端,向socket服務(wù)器請求TCP連接,連接成功之后,客戶端與服務(wù)器之間進行socket通信,接收客戶端發(fā)送的數(shù)據(jù)。這些數(shù)據(jù)經(jīng)解析處理后再存入數(shù)據(jù)庫MySQL。當(dāng)用戶需要查詢、定位時,Android客戶端會向Web服務(wù)器發(fā)起http請求,Web服務(wù)器連接數(shù)據(jù)庫,獲取數(shù)據(jù),將數(shù)據(jù)封裝成JSON格式,再通過http協(xié)議回傳給An-droid客戶端。Android客戶端再對JSON進行解析,并進行相關(guān)的UI處理。
3.服務(wù)器設(shè)計
服務(wù)器端主要通過socket技術(shù)進行數(shù)據(jù)采集,再經(jīng)解析處理存人數(shù)據(jù)庫。服務(wù)器設(shè)計主要包括socket服務(wù)器程序設(shè)計與數(shù)據(jù)庫設(shè)計。Socket服務(wù)器程序設(shè)計主要解決并發(fā)問題,大容量突發(fā)性數(shù)據(jù)請求造成的嚴重丟包率。本文設(shè)計了一種改進的生產(chǎn)者一消費者模式,采用線程池控制機制進行解決。數(shù)據(jù)庫設(shè)計需要考慮海量數(shù)據(jù)造成的查詢效率慢的問題,采用動態(tài)建表的方式,將數(shù)據(jù)分時存儲在不同的表中。
3.1Socket介紹
Socket是進程之間通信的一種方式。一個socket對應(yīng)于通信的一端?;竟ぷ髁鞒倘缦拢菏紫?,服務(wù)器端啟動,調(diào)用socketo建立一個套接字,然后調(diào)用bindo,將該套接字和本地網(wǎng)絡(luò)地址連在一起,再調(diào)用listeno,做好監(jiān)聽準備,并規(guī)定請求隊列的長度,然后調(diào)用accepto接收連接。客戶端在建立套接字后可調(diào)用connecto和服務(wù)器進行連接。連接建立之后,客戶端和服務(wù)器就可以通過writeo和reado來發(fā)送和接收數(shù)據(jù)。等待數(shù)據(jù)發(fā)送完畢,用closeo關(guān)閉套接字。socket基本工作流程如圖2所示。
3.2并發(fā)處理一基于改進的生產(chǎn)者一消費者模式
傳統(tǒng)的信息的傳輸一般采用UDP的通信方式,服務(wù)器監(jiān)聽端口,接收傳感信息,然后進行處理。但是該監(jiān)控系統(tǒng)要求對1000輛車進行監(jiān)控,并進行1s-次的數(shù)據(jù)采集,需要監(jiān)測的數(shù)據(jù)量大、并發(fā)量高,而且經(jīng)常面臨突發(fā)性超容量請求。在這種條件下,如果繼續(xù)采用傳統(tǒng)的socket的通信方式,會造成很大的系統(tǒng)開銷,而且丟包率將大大增加。文獻提出在Actor框架內(nèi)構(gòu)建socket,這樣可以將基于線程的編程模型和基于事件的編程模型統(tǒng)一起來,簡化并發(fā)編程的復(fù)雜性。文獻提出一種socket外包機制,通過繞過客戶端協(xié)議棧的數(shù)據(jù)包,加速訪問速度。文獻提出包含socket接口的域內(nèi)通信機制,減小了TCP傳輸和長距離通信的開銷。但是上述幾種方案都沒有很好的解決突發(fā)性超容量請求造成的嚴重丟包率。本文采用線程池模型,改進生產(chǎn)者消費者模式進行設(shè)計,利用緩沖池、線程池建立多線程并發(fā)連接,丟包率低,訪問速度快。生產(chǎn)者一消費者改進模型如圖3所示。
生產(chǎn)者一消費者模式,可以實現(xiàn)讀寫互斥,一般用在多線程并發(fā)的情況下,以防止緩沖區(qū)出現(xiàn)讀寫混亂。GNSS接收機與socket服務(wù)器建立連接成功之后開啟一個新的線程,負責(zé)接收數(shù)據(jù),作為生產(chǎn)者,向緩存中寫入數(shù)據(jù),取出數(shù)據(jù)的線程作為消費者。在生產(chǎn)者和消費者之間的創(chuàng)建n個公共緩沖區(qū),然后增加一個緩沖池調(diào)度管理線程,對緩沖池中的緩沖區(qū)進行管理。生產(chǎn)者線程寫入數(shù)據(jù)時,會檢測當(dāng)前緩沖區(qū)狀態(tài),如果緩沖區(qū)未滿,則把接收到的信息寫入緩沖區(qū);如果緩沖區(qū)已滿,則通知緩沖池調(diào)度管理線程更換新的緩沖區(qū),而生產(chǎn)者可以不停止寫入動作來保持數(shù)據(jù)的最新。消費者線程可以從緩沖區(qū)讀取實時數(shù)據(jù)并進行解析,以數(shù)據(jù)庫表相一致的格式,寫入二級緩沖區(qū)。
生產(chǎn)者與消費者之間采用互斥信號量實現(xiàn)線程對緩沖池的互斥使用。只要緩沖池未滿,生產(chǎn)者便可將消息持續(xù)送入緩沖池中;只要緩沖池未空,消費者便可從緩沖池中不斷取走一定量的消息。緩沖區(qū)為空時,阻塞消費者,讓生產(chǎn)者“生產(chǎn)”;生產(chǎn)者生產(chǎn)一定量傳感信息后,會通知消費者及時“消費”。傳統(tǒng)的生產(chǎn)者一消費者模型在緩沖區(qū)滿時,阻塞生產(chǎn)者,為臨界區(qū)外等待的消費者放行,當(dāng)消費結(jié)束時,通知生產(chǎn)者“生產(chǎn)”。由于傳感信息的實時性,一段時間內(nèi)數(shù)據(jù)是不斷產(chǎn)生的,阻塞會造成傳感信息的丟失。因此采用線程池控制機制,讓滿的緩沖區(qū)進行切換,使得緩沖區(qū)中一直持有最新的傳感信息,很好的解決了并發(fā)丟包問題。
3.3數(shù)據(jù)庫設(shè)計一動態(tài)建表
該監(jiān)控系統(tǒng)需要存儲的數(shù)據(jù),主要有:
1)用戶信息。用戶注冊信息,包括用戶賬號、密碼、駕駛員姓名、手機號、被分配端口號等。
2)車輛信息。包括日期、時間、速度、經(jīng)緯度、端口號等。
3)衛(wèi)星信息。包括日期、時間、PRN、SNR等。
4)管理員信息。管理員賬號、密碼、權(quán)限等。
車輛信息與衛(wèi)星信息是由GNSS接收機發(fā)送的NMEA格式的GPS信號解析后所得。由于系統(tǒng)實時性要求高,1s一次數(shù)據(jù)采集,經(jīng)測算接收到的一幀數(shù)據(jù)大小在500B到800B之間,那么一輛車一天的數(shù)據(jù)量大約有4OM,那么1000輛車,數(shù)據(jù)量達到了G級別,所以對后續(xù)數(shù)據(jù)的查詢造成了極大的障礙,嚴重影響系統(tǒng)運行的效率。所以針對車輛信息表與衛(wèi)星表,我們采用動態(tài)建表的方式,實現(xiàn)分表存儲。每天動態(tài)建立十張表,以日期及GNSS接收機對應(yīng)的服務(wù)器分配的端口號尾數(shù)來進行分表。如2016年5月1日,端口號為10004的接收機發(fā)送的車輛信息數(shù)據(jù)存儲在caaable_2016_05_01_4表中,衛(wèi)星表類似。數(shù)據(jù)庫我們使用關(guān)系型數(shù)據(jù)庫MySQL,MySQL數(shù)據(jù)表結(jié)構(gòu)圖如圖4所示。
4.Android客戶端設(shè)計
Android是一種基于Linux的自由及開放源代碼的操作系統(tǒng),主要應(yīng)用于移動設(shè)備,如智能手機和平板電腦,由Google公司和開放手機聯(lián)盟領(lǐng)導(dǎo)與開發(fā)。系統(tǒng)采用分層架構(gòu),從下至上依次為Linux核心層(Linux kernel)、應(yīng)用程序框架層(hardwareabstracting layer)、系統(tǒng)庫層(1ibraries)、Android運行時(Androidruntime)、應(yīng)用程序框架層(application framework)、應(yīng)用程序?qū)樱╝pplications)。Activity是Android平臺應(yīng)用程序的載體,它允許用戶在其上構(gòu)建一個應(yīng)用界面,并提供用戶處理事件的API,如onKeyEvent,onTouchEvent等。一般應(yīng)用程序由多個Activity組成,Activity之間可以進行相互跳轉(zhuǎn),通過返回值傳遞數(shù)據(jù)。視圖組件View是最基本的uI類,Android界面設(shè)計中大部分高級uI組件都是繼承View類來實現(xiàn),如TextView、Button、List、EditText、RadioButton、Checkbox等,通過調(diào)用setContent-Viewo可以在Activity中顯示已構(gòu)造好的用戶視圖。
Android客戶端設(shè)計包括Android界面顯示設(shè)計與數(shù)據(jù)庫訪問設(shè)計。Android客戶端界面設(shè)計主要通過控制和使用activ-ity和view來實現(xiàn)的,多個activiIv通過堆棧來進行管理。由于Android客戶端不能直接訪問遠程數(shù)據(jù)庫,所以需要借助web服務(wù)器程序訪問數(shù)據(jù)庫。Android客戶端與web服務(wù)器之間使用輕量級數(shù)據(jù)格式JSON進行通信,可以保證通信的實時性,減少手機流量的耗費。
4.1 Android客戶端與web服務(wù)器通信-JSON
目前,Android應(yīng)用和Web服務(wù)器之間有兩種主要的數(shù)據(jù)交換方式:XML(可擴展標記語言)和JSON。XML是用于標記電子文檔的語言,以使其結(jié)構(gòu)化。它是一種原始語言,允許用戶定義自己的標記語言。JSON是一種用于交換數(shù)據(jù)的輕量級格式,是JavaScript的一個子集。在企業(yè)智能信息平臺中,通過使用JSON格式將數(shù)據(jù)交換性能更優(yōu)。因為JSON格式簡單,易于讀寫,它被壓縮,占用帶寬小,可以節(jié)省互聯(lián)網(wǎng)接人成本,并且傳輸速度快。因此更適合手機應(yīng)用的實時傳輸。所以我們采用JSON作為Android與web服務(wù)器通信的數(shù)據(jù)交互方式?;贘SON的數(shù)據(jù)交互示意圖如圖5所示。
Android訪問遠程數(shù)據(jù)庫MySQL,需要先向web服務(wù)器發(fā)起http請求,web服務(wù)器連接數(shù)據(jù)庫,獲取數(shù)據(jù),將數(shù)據(jù)封裝成JSON格式,再通過http協(xié)議回傳給Android客戶端。Andmid客戶端再對JSON進行解析,并進行相關(guān)的uI處理。
4.2 Android客戶端界面設(shè)計
Android客戶端實行分級設(shè)計,有大管理員、小管理員與普通用戶三種級別。用戶可根據(jù)自身級別選擇不同登錄按鈕。登錄界面如圖7(a1所示。大管理員具有最高權(quán)限,可以查看所有車輛信息,為小管理員分配賬號,車輛登記,查看小管理員信息,為小管理員分配管轄車輛,以及修改密碼等功能。小管理員具有查看管轄區(qū)域內(nèi)的車輛信息,及密碼修改等功能。普通用戶具有查看自身信息,注冊新用戶及密碼找回功能。An-droid客戶端分級功能圖如圖6所示。部分界面展示圖如圖7,圖8所示。
5.試驗結(jié)果
為驗證系統(tǒng)的穩(wěn)定性、可靠性與高效性,本文進行了大量測試實驗?,F(xiàn)選取一組實驗進行說明,如圖9實驗效果圖所示。
圖9(a1展示了某輛車的實時定位跟蹤功能,其中紅色圖標為車輛位置,點擊紅色圖標可顯示經(jīng)緯度信息,并能實時跟蹤。為測試系統(tǒng)的跟蹤功能及系統(tǒng)的穩(wěn)定性,進行了如下實驗:16:52-17:00靜止,17:00-17:30從實驗室出發(fā)在校園內(nèi)行走。17:00回到實驗室,一直運行到次日9:00。測試數(shù)據(jù)如表1所示,記錄各個時間點的經(jīng)緯度以及查看系統(tǒng)是否運行正常。系統(tǒng)運行穩(wěn)定,能實時定位跟蹤。
圖9(b)展示的是衛(wèi)星圖像模式下的定位跟蹤圖。功能與(a)相同。
圖9(c)展示了多輛車的同時定位功能。點擊紅色圖標可與圖9(a)一樣,顯示經(jīng)緯度信息。
圖9(d)展示軌跡查詢功能,顯示某個時間段內(nèi)的起點,終點與行駛軌跡。與實際行駛軌跡一致。
圖9(e)展示的是衛(wèi)星信息顯示功能。其中上圖表示的是GNSS模塊能接收到的衛(wèi)星信號,以及衛(wèi)星位置。圓環(huán)從外向里,表示緯度0度到90度。以圓點為中心的方位角表示經(jīng)度。圖中顯示了接收到10個衛(wèi)星信號。大多分布在北緯30度到60度之間。下圖展示的是衛(wèi)星信號的信噪比(SNR),說明了衛(wèi)星信號的強弱,條形圖越大,衛(wèi)星信號越強。
系統(tǒng)經(jīng)過長時間運行,并未出現(xiàn)閃退或顯示異常等情況,驗證了系統(tǒng)的穩(wěn)定性。關(guān)于系統(tǒng)的高效性,通過查看定位時間與軌跡查詢時間進行測試。定位時間指從開啟定位,訪問數(shù)據(jù)庫,再到地圖加載,紅色圖標顯示實際位置,整個過程大約需要幾十毫秒。軌跡查詢時間與查詢時間段長短有關(guān),考慮到查詢的效率,采用的是根據(jù)時間段長短,分時采樣,時間基本控制在2秒以內(nèi),查詢時間段越短,越精確。
6.結(jié)束語
本文設(shè)計的移動車輛監(jiān)控系統(tǒng)可以實現(xiàn)對車輛位置的實時監(jiān)測。監(jiān)督管理部門、移動出行服務(wù)公司、移動出行車主分別作為三級用戶,實現(xiàn)對注冊車輛統(tǒng)一化監(jiān)督管理。經(jīng)實際測試,可實現(xiàn)對注冊車輛的信息管理,實時跟蹤定位,查詢歷史軌跡信息以及顯示衛(wèi)星信息等功能。系統(tǒng)運行穩(wěn)定,實時性高,操作界面人性化。由于數(shù)據(jù)量龐大以及運算時間要求苛刻,因此在大規(guī)模增加車輛應(yīng)用時,如何更好地進行數(shù)據(jù)存儲和提高處理速度仍是進一步研究的目標。