鐘新斌,劉 云,張振江
(北京交通大學(xué)通信與信息系統(tǒng)北京市重點(diǎn)實(shí)驗(yàn)室,北京100044)
城市軌道交通建設(shè)的飛速發(fā)展,給城市生活帶來(lái)了巨大的便利,同時(shí)也給城市軌道交通基礎(chǔ)設(shè)施的日常養(yǎng)護(hù)維修普查工作帶來(lái)了不小的挑戰(zhàn)。針對(duì)傳統(tǒng)普查方式存在的不足,本文設(shè)計(jì)了一種基于Android平臺(tái)的城市軌道交通養(yǎng)護(hù)維修普查信息采集平臺(tái),該平臺(tái)允許普查工作人員使用支持android應(yīng)用的手機(jī)等便攜式移動(dòng)設(shè)備,隨時(shí)隨地記錄各類(lèi)普查數(shù)據(jù),并在特定條件下安全可靠地將普查數(shù)據(jù)上傳到普查信息系統(tǒng)中,提高普查工作效率。
平臺(tái)的主要設(shè)計(jì)思路是在現(xiàn)有養(yǎng)護(hù)維修普查信息系統(tǒng)的基礎(chǔ)上,增加一個(gè)基于Android操作系統(tǒng)的普查信息采集客戶端,該普查客戶端可以靈活地安裝在支持Android應(yīng)用的手機(jī)等便攜式移動(dòng)設(shè)備中,并可以和部署在遠(yuǎn)端Internet上的服務(wù)器交互通信,如圖1。
圖1 平臺(tái)總體設(shè)計(jì)框圖
普查客戶端的前端GUI信息錄入模塊,用于給普查人員提供友好的普查信息錄入界面;數(shù)據(jù)存取接口用于保存和維護(hù)各類(lèi)普查信息;數(shù)據(jù)包封裝模塊用于將各類(lèi)普查信息封裝成統(tǒng)一格式的數(shù)據(jù)包,便于傳輸和推送;編碼壓縮用于保證數(shù)據(jù)包推送的可靠性和有效性;客戶端配置單元可以獲取并更新從普查服務(wù)器端下發(fā)的配置信息;基于WIFI、GPRS和3G網(wǎng)絡(luò),Client和Server通過(guò)通信組件實(shí)現(xiàn)交互,完成配置參數(shù)下發(fā)和數(shù)據(jù)推送功能。
普查信息采集平臺(tái)主要實(shí)現(xiàn)將普查信息推送到服務(wù)器(普查信息系統(tǒng))。要實(shí)現(xiàn)數(shù)據(jù)的準(zhǔn)確、高效的提交需要普查客戶端和服務(wù)器的有機(jī)配合。針對(duì)平臺(tái)特點(diǎn),其工作流程如圖2。
圖2 平臺(tái)工作流程
用戶在經(jīng)過(guò)1和2過(guò)程成功開(kāi)啟普查客戶端應(yīng)用后,經(jīng)過(guò)過(guò)程3可以啟動(dòng)普查客戶端后臺(tái)服務(wù),該服務(wù)可以定時(shí)檢查手機(jī)網(wǎng)絡(luò)狀態(tài)、內(nèi)存和最新的普查數(shù)據(jù)保存情況。當(dāng)更新周期到達(dá)時(shí),經(jīng)過(guò)4和5獲取從服務(wù)器下發(fā)的最新配置參數(shù),完成平臺(tái)設(shè)定。
普查人員可以通過(guò)觸摸屏、手機(jī)鍵盤(pán)等方式填寫(xiě)特定時(shí)間、特定位置和特定普查對(duì)象的普查信息,這些信息通過(guò)數(shù)據(jù)接口保存在Android平臺(tái)內(nèi)嵌的SQLite數(shù)據(jù)庫(kù)中[1]。
當(dāng)后臺(tái)服務(wù)監(jiān)聽(tīng)到數(shù)據(jù)需要推送時(shí),比如數(shù)據(jù)記錄到達(dá)一定數(shù)量,手機(jī)內(nèi)存空間不足,或用戶手動(dòng)提交等,此時(shí)會(huì)啟動(dòng)數(shù)據(jù)推送功能,普查客戶端將普查數(shù)據(jù)按一定的方式進(jìn)行統(tǒng)一的組織,經(jīng)過(guò)一定的壓縮和編碼,在網(wǎng)絡(luò)環(huán)境和服務(wù)器就緒的情況下將數(shù)據(jù)提交到普查服務(wù)器端。
普查服務(wù)器接收到普查客戶端提交的數(shù)據(jù)后,進(jìn)行解碼和解壓,進(jìn)一步拆封數(shù)據(jù)包,將普查信息存入數(shù)據(jù)庫(kù)中,同時(shí)給客戶端反饋狀態(tài)碼 。
普查客戶端從服務(wù)器端獲取正確的反饋狀態(tài)碼后,可以繼續(xù)發(fā)送下一個(gè)數(shù)據(jù)包,否則重新發(fā)送。
在移動(dòng)環(huán)境下,通常受到帶寬和網(wǎng)絡(luò)流量的限制,普查客戶端要將普查數(shù)據(jù)高效可靠地上傳到普查服務(wù)器中,需要對(duì)暫存在Android移動(dòng)設(shè)備中的數(shù)據(jù)進(jìn)行很好的封裝。平臺(tái)對(duì)普查數(shù)據(jù)的封裝過(guò)程如下:
圖3 數(shù)據(jù)封裝過(guò)程
JSON(JavaScript Object Notation)和XML(Extensible Markup Language)是目前最常用的2種數(shù)據(jù)傳輸格式[2]。與XML格式相比,JSON作為輕量級(jí)的數(shù)據(jù)傳輸格式,它基于文本,易于閱讀和編碼,同時(shí)更加節(jié)省計(jì)算資源,減少網(wǎng)絡(luò)傳輸流量,加快網(wǎng)絡(luò)傳輸。Android平臺(tái)的org.json包提供了對(duì)JSON格式數(shù)據(jù)的序列化和反序列化的支持。此外,為了進(jìn)一步提高平臺(tái)的數(shù)據(jù)傳輸效率,減少網(wǎng)絡(luò)傳輸流量。平臺(tái)還對(duì)JSON格式的數(shù)據(jù)采用ZIP算法進(jìn)行了壓縮處理。
普查數(shù)據(jù)經(jīng)ZIP 壓縮后,JSON格式的文本數(shù)據(jù)轉(zhuǎn)換成壓縮后的二進(jìn)制數(shù)據(jù)格式,這類(lèi)數(shù)據(jù)的高效、無(wú)損的傳輸和表示是采集平臺(tái)需要考慮的問(wèn)題。為了便于二進(jìn)制文件的傳輸,需對(duì)ZIP壓縮后數(shù)據(jù)采用一種映射方式將二進(jìn)制文件映射成文本數(shù)據(jù)再進(jìn)行傳輸和處理,本平臺(tái)采用Base64編碼技術(shù)實(shí)現(xiàn)映射。Base64編碼MIME規(guī)定的一種編碼格式,其通過(guò)64個(gè)ASCII字符碼對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行重新編碼組合[3],特別適合在http傳輸中應(yīng)用。
為了保證普查數(shù)據(jù)可以高效、可靠地推送到部署在遠(yuǎn)端Internet上的服務(wù)器中,普查客戶端需一定的機(jī)制對(duì)采集的數(shù)據(jù)進(jìn)行整合,通信雙方按一定的機(jī)制實(shí)現(xiàn)交互。本系統(tǒng)設(shè)計(jì)的數(shù)據(jù)推送流程如圖4。
圖4 客戶端普查數(shù)據(jù)推送流程
要將普查客戶端采集的普查數(shù)據(jù)推送到普查信息系統(tǒng)中,必須通過(guò)目前的WIFI、GPRS或是3G網(wǎng)絡(luò)。Android平臺(tái)提供Socket和HTTP等方式實(shí)現(xiàn)網(wǎng)絡(luò)通信,由于現(xiàn)有的普查信息系統(tǒng)是基于B/S結(jié)構(gòu),需要部署到Web服務(wù)器中,而設(shè)計(jì)基于socket的健壯的web服務(wù)器較為困難。在不同的網(wǎng)絡(luò)中,HTTP方式實(shí)現(xiàn)較為容易。因此平臺(tái)采用Http方式實(shí)現(xiàn)客戶端和服務(wù)端的網(wǎng)絡(luò)通信。HTTP請(qǐng)求包括POST和GET 2種方式。由于GET方式對(duì)傳輸?shù)臄?shù)據(jù)長(zhǎng)度有限制,而普查數(shù)據(jù)較為龐大,因此采用POST方式上傳。
為了保證普查客戶端和服務(wù)端的安全通信,特別是保證傳輸數(shù)據(jù)的完整性,平臺(tái)采用基于RSA公鑰密碼體系的安全交互方式,如圖5。
圖5 普查客戶端與服務(wù)器交互機(jī)制
普查客戶端:
(1)普查客戶端將原始普查數(shù)據(jù)經(jīng)JSON封裝→ZIP壓縮→Base64編碼后組成原始數(shù)據(jù)A;
(2)數(shù)據(jù)A附加用戶標(biāo)識(shí)UA,組成數(shù)據(jù)B=A+UA,UA由(uName, pwd)組成,分別是服務(wù)器分配給客戶端的用戶名和口令;
(3)采用算法計(jì)算數(shù)據(jù)的值v=MD5(B);
(4)采用MD5算法計(jì)算數(shù)據(jù)B的MD5值v=MD5(B);
(5)采用RSA加密算法,用客戶端私鑰對(duì)v加密,得到C=EPRa(v);
(6)將數(shù)據(jù)C附加到數(shù)據(jù)B中組成完整的數(shù)據(jù)包P=B+C,將P上傳個(gè)到服務(wù)器。需要說(shuō)明的是,為了保證安全,可對(duì)P進(jìn)行加密處理。
普查服務(wù)器:
(1)服務(wù)器獲取普查客戶端上傳的數(shù)據(jù)'P;
(2)解析P'的數(shù)據(jù)B'和C',對(duì)B'進(jìn)行MD5雜湊計(jì)算得到MD5值v'=MD5(B'),同時(shí)對(duì)C'用RSA解密算法,用客戶端的公鑰進(jìn)行解密得到一個(gè)參數(shù)v''=Dpua(C');
(3)比較v'與v'',如果相同,說(shuō)明數(shù)據(jù)包在傳輸過(guò)程中沒(méi)有被篡改。否則,丟棄該數(shù)據(jù);
(4)從B'中獲取A'和UA',系統(tǒng)對(duì)UA'中的用戶進(jìn)行驗(yàn)證,驗(yàn)證通過(guò)后可以將A'中的數(shù)據(jù)經(jīng)Base64解碼→ZIP解壓縮→JSON解析過(guò)程得到普查數(shù)據(jù)并存入數(shù)據(jù)庫(kù)中,否則丟棄該組數(shù)據(jù)。
基于Android平臺(tái)的城市軌道交通養(yǎng)護(hù)維修普查信息采集平臺(tái),有效解決了普查數(shù)據(jù)的二次錄入問(wèn)題,節(jié)約了大量人力物力,加速了城市軌道交通信息化的建設(shè)。本系統(tǒng)雖然對(duì)基本的普查信息采集方面效果明顯,但在對(duì)圖片特別是多媒體(視頻等)普查數(shù)據(jù)支持方面有待進(jìn)一步改善。
[1] 勒巖,姚尚明. Google Android 開(kāi)發(fā)入門(mén)與實(shí)戰(zhàn)[M] . 北京:人民郵電出版社.
[2] Guanhua Wang. Improving Data Transmission in Web Applications via the Translation between XML and JSON.Communications and Mobile Computing (CMC), 2011, 182-185.
[3] Shirali-Shahreza, M.; Shirali-Shahreza, S.Sending pictures by SMS. Advanced Communication Technology, 2009, 222-223.
[4] Reto Meier. Professional Android 2 Application Development[M] . Indianapolis:Wiley publishing Inc, 2011.