江燕良,黃海于
(西南交通大學(xué) 信息科學(xué)與技術(shù)學(xué)院,成都610031)
隨著數(shù)字化和互聯(lián)網(wǎng)的飛速發(fā)展,特別是 Web2.0技術(shù)的發(fā)展,互聯(lián)網(wǎng)上的數(shù)據(jù)量呈現(xiàn)高速增長(zhǎng)的態(tài)勢(shì),導(dǎo)致互聯(lián)網(wǎng)數(shù)據(jù)處理能力相對(duì)不足;同時(shí)互聯(lián)網(wǎng)上存在著大量處于閑置狀態(tài)的計(jì)算設(shè)備和存儲(chǔ)資源,如果將其聚合起來(lái)統(tǒng)一調(diào)度和提供服務(wù),則可以大大提高利用率,讓更多的用戶從中受益。云計(jì)算就是基于這種考慮,通過(guò)虛擬化技術(shù)將資源進(jìn)行整合,形成龐大的計(jì)算與存儲(chǔ)網(wǎng)絡(luò),從而更好地為用戶服務(wù)[1]。隨著移動(dòng)終端的普及,將移動(dòng)終端和云計(jì)算相結(jié)合形成移動(dòng)云計(jì)算,可以很好地滿足用戶隨時(shí)隨地的資源訪問和事務(wù)處理的需求,同時(shí)也可以解決移動(dòng)終端在資源上不足的問題。移動(dòng)云計(jì)算的概念,就是利用云計(jì)算技術(shù)來(lái)解決移動(dòng)終端的存儲(chǔ)和數(shù)據(jù)處理等問題,幫助用戶擺脫硬件設(shè)備、存儲(chǔ)設(shè)備、應(yīng)用程序等條件的限制,將移動(dòng)終端應(yīng)用的“計(jì)算”從終端轉(zhuǎn)移到服務(wù)器端,從而弱化對(duì)移動(dòng)終端設(shè)備的處理要求[2]。
Android系統(tǒng)是Google公司最新推出的移動(dòng)設(shè)備軟件平臺(tái),與其他Symbian、Windows Mobile手機(jī)操作系統(tǒng)相比,其源代碼完全開放,任何人和機(jī)構(gòu)都可以免費(fèi)使用。Android系統(tǒng)具有強(qiáng)大的應(yīng)用層API和豐富的傳感器接入功能,其開放的平臺(tái)有利于開發(fā)者開發(fā)出各類應(yīng)用軟件,是一個(gè)真正意義上的開放性移動(dòng)設(shè)備綜合平臺(tái),基于Android系統(tǒng)的研發(fā)己經(jīng)成為熱門的方向[3]。
針對(duì)當(dāng)前老年人或兒童出現(xiàn)迷路或走失等危機(jī)情況的應(yīng)急處理等應(yīng)用需求,本文提出了一種云服務(wù)下基于Android移動(dòng)智能終端信息采集和處理的基礎(chǔ)架構(gòu)。該架構(gòu)基于手機(jī)云計(jì)算平臺(tái)Openmobster,將其部署在PC上作為服務(wù)器,利用周圍的無(wú)線網(wǎng)絡(luò)資源,使其與Android手機(jī)客戶端建立即時(shí)通信,根據(jù)平臺(tái)自身的推送和同步機(jī)制,實(shí)現(xiàn)數(shù)據(jù)的上傳和下發(fā)。該架構(gòu)使云計(jì)算真正的“落地”,實(shí)實(shí)在在地為手機(jī)提供服務(wù)。
由于設(shè)計(jì)采用的測(cè)試環(huán)境是由無(wú)線路由器搭建的無(wú)線網(wǎng)絡(luò)環(huán)境,考慮到網(wǎng)絡(luò)覆蓋范圍的局限性,當(dāng)用戶從一個(gè)網(wǎng)絡(luò)區(qū)域移動(dòng)到另一個(gè)網(wǎng)絡(luò)區(qū)域時(shí),數(shù)據(jù)的交互會(huì)發(fā)生中斷,因此在不同的網(wǎng)絡(luò)區(qū)域都搭建Openmobster云服務(wù)器,即使手機(jī)跟之前的服務(wù)器連接發(fā)生了中斷,只需跟當(dāng)前的服務(wù)器重新建立連接,數(shù)據(jù)便從中斷處繼續(xù)上傳到當(dāng)前的服務(wù)器,最后只需把這些不同服務(wù)器端數(shù)據(jù)庫(kù)的數(shù)據(jù)匯總到一個(gè)統(tǒng)一的數(shù)據(jù)庫(kù),需要時(shí)還可以下載到手機(jī)端查閱??傮w拓?fù)浣Y(jié)構(gòu)圖如圖1所示。
圖1 總體拓?fù)浣Y(jié)構(gòu)
本文設(shè)計(jì)的基于Android平臺(tái)開發(fā)云應(yīng)用的基礎(chǔ)框架包含以下幾個(gè)主要部分:Mysql數(shù)據(jù)庫(kù)服務(wù)器、Openmobster云平臺(tái)、Web網(wǎng)頁(yè)服務(wù)器、Android手機(jī)客戶端和無(wú)線網(wǎng)絡(luò)。本設(shè)計(jì)采用了C/S模式和B/S模式相結(jié)合的方式,服務(wù)器主要采用Openmobster手機(jī)云平臺(tái)內(nèi)嵌的JBoss服務(wù)器,并將其與Mysql數(shù)據(jù)庫(kù)和Web網(wǎng)頁(yè)連接起來(lái);客戶端采用安裝了云平臺(tái)客戶端的Android智能手機(jī)。云服務(wù)器端和手機(jī)客戶端根據(jù)云平臺(tái)自身的網(wǎng)絡(luò)通信機(jī)制,利用周圍的無(wú)線網(wǎng)絡(luò)資源,建立即時(shí)通信。然后通過(guò)Web網(wǎng)頁(yè)下發(fā)數(shù)據(jù)請(qǐng)求命令,用戶的手機(jī)客戶端接收并解析命令請(qǐng)求,將數(shù)據(jù)上傳到服務(wù)器端的數(shù)據(jù)庫(kù)??傮w架構(gòu)圖如圖2所示。
圖2 總體架構(gòu)圖
服務(wù)器端采用開源的Openmobster手機(jī)云平臺(tái)來(lái)搭建即時(shí)通信服務(wù)器,并根據(jù)系統(tǒng)的需要進(jìn)行了改進(jìn)和優(yōu)化。該平臺(tái)是一個(gè)向本地手機(jī)程序提供“云”服務(wù)的平臺(tái),它內(nèi)嵌了一個(gè)基于J2EE的開放源代碼的應(yīng)用服務(wù)器JBoss。在JBoss服務(wù)器啟動(dòng)后,可以通過(guò)PC的瀏覽器啟動(dòng)控制臺(tái)。JBoss的控制臺(tái)是個(gè)界面簡(jiǎn)陋的控制臺(tái),和其他商業(yè)化服務(wù)器的控制臺(tái)差別很大,一點(diǎn)都不直觀。因此考慮將控制臺(tái)改造成網(wǎng)頁(yè)的形式,這樣既方便用戶操作,而且界面也更直觀。
為了在該平臺(tái)的服務(wù)器跟手機(jī)終端之間實(shí)現(xiàn)通信,需要在JBoss控制臺(tái)程序中新增一條命令,相應(yīng)地在服務(wù)器端也要新增處理這個(gè)命令的代碼,用控制臺(tái)發(fā)命令,讓服務(wù)器發(fā)Push消息給手機(jī)上的Service。服務(wù)器端的總體設(shè)計(jì)流程主要分為以下幾步:
① 對(duì)控制臺(tái)代碼進(jìn)行分析,找出控制臺(tái)的命令與類的對(duì)應(yīng)關(guān)系。
② 新增一個(gè)命令類,并且修改配置文件,使控制臺(tái)可以運(yùn)行新命令請(qǐng)求。
③ 在服務(wù)器端也新增了一個(gè)對(duì)應(yīng)控制臺(tái)新命令請(qǐng)求的類,繼承自MobileServiceBean,放在服務(wù)器端處理新增的命令請(qǐng)求。
④在服務(wù)器端建立一條Push通道。當(dāng)新增的命令請(qǐng)求類在收到命令時(shí)就會(huì)通過(guò)這個(gè)Push通道向手機(jī)上的Service發(fā)Push消息。
⑤ 將控制臺(tái)改造成網(wǎng)頁(yè)的形式來(lái)下發(fā)命令請(qǐng)求。
⑥ 手機(jī)客戶端處理完命令請(qǐng)求,將處理結(jié)果封裝上傳到服務(wù)器端的數(shù)據(jù)庫(kù)。
客戶端的設(shè)計(jì)包括手機(jī)即時(shí)通信客戶端和Web即時(shí)通信客戶端。
Web即時(shí)通信客戶端基于JavaEE,利用Openmobster云平臺(tái)的JBoss服務(wù)器對(duì)JSP網(wǎng)頁(yè)文件進(jìn)行熱部署,通過(guò)登錄到即時(shí)通信服務(wù)器端與手機(jī)客戶端進(jìn)行通信。
在移動(dòng)互聯(lián)網(wǎng)中,Android智能終端通過(guò)WiFi或者GPRS連接到互聯(lián)網(wǎng)[4]。手機(jī)即時(shí)通信客戶端通過(guò)激活手機(jī)設(shè)備連接到服務(wù)器,然后以Java bean的傳輸協(xié)議形式,對(duì)協(xié)議進(jìn)行解析并執(zhí)行相應(yīng)的命令操作,最后再將處理的結(jié)果封裝成bean的對(duì)象在客戶端與服務(wù)器之間進(jìn)行傳輸。
通常情況下用戶將自己的數(shù)據(jù)信息上傳到數(shù)據(jù)庫(kù),其他用戶通過(guò)登錄數(shù)據(jù)庫(kù)的方式來(lái)共享數(shù)據(jù)信息。針對(duì)大文件的管理與共享,為了提高上傳和下載的效率,避免大文件上傳或下載失敗時(shí)將整個(gè)文件重新上傳或下載,實(shí)現(xiàn)了對(duì)文件的分割以及文件的合并操作。
(1)文件分塊
將一個(gè)較大的文件上傳到數(shù)據(jù)庫(kù)時(shí),上傳速度往往會(huì)受到網(wǎng)絡(luò)寬帶的影響。針對(duì)較大文件的保存與管理,對(duì)文件進(jìn)行分塊,根據(jù)網(wǎng)絡(luò)的帶寬設(shè)置文件塊的大小。
(2)分塊文件上傳
文件分塊上傳的時(shí)候,遍歷要上傳的文件所在的路徑,當(dāng)查找到要上傳的文件時(shí),根據(jù)文件分塊的大小,計(jì)算文件分割的塊數(shù)和最后一個(gè)文件塊的大小,從第一個(gè)文件塊開始上傳。當(dāng)文件在上傳的過(guò)程中由于網(wǎng)絡(luò)或者其他原因,使得服務(wù)器數(shù)據(jù)庫(kù)與客戶端的連接斷開,導(dǎo)致文件上傳中斷,在客戶端與服務(wù)器端數(shù)據(jù)庫(kù)重新建立連接后,需要續(xù)傳文件,這時(shí)就要通過(guò)上次上傳過(guò)程中記錄的文件路徑和名稱以及相應(yīng)的文件塊編號(hào),找到上次上傳文件的斷點(diǎn)。續(xù)傳文件時(shí),依然要遍歷文件所在的路徑,通過(guò)文件路徑和名稱找到對(duì)應(yīng)的文件,再使用文件塊的編號(hào)和文件塊的大小獲取下一次文件要上傳的位置。
(3)分塊文件下載
下載的時(shí)候根據(jù)相關(guān)的查詢條件,使用sql語(yǔ)句,根據(jù)文件編號(hào)、文件路徑、文件名稱、文件塊編號(hào)以及文件塊是否已經(jīng)下載等標(biāo)志查找符合條件的記錄。當(dāng)文件在下載的過(guò)程中由于網(wǎng)絡(luò)或者其他原因,使得服務(wù)器數(shù)據(jù)庫(kù)與客戶端的連接斷開,導(dǎo)致文件下載中斷,在客戶端與服務(wù)器端數(shù)據(jù)庫(kù)重新建立連接后,需要繼續(xù)下載文件,查詢條件不變,確保搜查出來(lái)的記錄是相同的,根據(jù)上次下載過(guò)程中標(biāo)記的文件路徑和名稱以及相應(yīng)的文件塊編號(hào),找到相應(yīng)斷點(diǎn)。將對(duì)應(yīng)的記錄繼續(xù)下載,直到所有的記錄下載完成。
(4)分塊文件合并
文件的合并是文件合并下載過(guò)程中的一部分,即每次下載某條記錄中的文件內(nèi)容時(shí),先判斷該文件塊屬于哪個(gè)文件。用戶根據(jù)文件名稱、文件路徑等信息查找自己需要的文件,如果存在符合條件的記錄,就依次訪問這些記錄,并將每條記錄中的文件內(nèi)容讀取出來(lái),寫入相應(yīng)的文件中。所有記錄被訪問完的同時(shí),所有的文件分塊都被寫到了相應(yīng)文件中,即不會(huì)出現(xiàn)文件內(nèi)容的覆蓋問題,也不會(huì)額外的占用存儲(chǔ)空間。
老年人或小孩遇到迷路或走失等危急情況時(shí),通過(guò)遠(yuǎn)程控制的方式,向老人或小孩的手機(jī)發(fā)送指令,定位手機(jī)當(dāng)前的位置并顯示在地圖上,然后將位置信息截圖并上傳到服務(wù)器上,用戶便可以從服務(wù)器數(shù)據(jù)庫(kù)獲取老人或小孩的位置信息,幫助他們脫離危險(xiǎn)。該功能的設(shè)計(jì)處理流程如圖3所示。
圖3 追蹤定位功能處理流程圖
該功能的實(shí)現(xiàn)首先通過(guò)服務(wù)器端網(wǎng)頁(yè)下發(fā)控制指令并封裝,然后服務(wù)器端的相應(yīng)接口定時(shí)檢測(cè)數(shù)據(jù)對(duì)象是否發(fā)生更新,并將更新的數(shù)據(jù)對(duì)象推送給手機(jī)客戶端,手機(jī)客戶端接收并解析該對(duì)象,執(zhí)行相應(yīng)的指令操作。其次,對(duì)指令操作的結(jié)果進(jìn)行封裝并分塊,然后將其上傳到服務(wù)器端的數(shù)據(jù)庫(kù)。最后,將這些分塊的數(shù)據(jù)包下載并合并,提供給用戶。定位追蹤功能的實(shí)現(xiàn)流程如圖4所示。
① 用戶通過(guò)瀏覽器打開網(wǎng)頁(yè),選擇需要下發(fā)的命令,然后輸入用戶名和密碼,點(diǎn)擊“確定”后調(diào)起JSP代碼。JSP代碼將網(wǎng)頁(yè)請(qǐng)求封裝的各功能選項(xiàng)字段取出,封裝進(jìn)一個(gè)數(shù)據(jù)對(duì)象中。
②在服務(wù)器端定義的用于下發(fā)的Channel會(huì)定期調(diào)用相關(guān)接口對(duì)上面的封裝數(shù)據(jù)對(duì)象進(jìn)行檢查,一旦發(fā)現(xiàn)有新插入的數(shù)據(jù),會(huì)通過(guò)對(duì)應(yīng)的接口取出該數(shù)據(jù),將其封裝到bean對(duì)象中,通過(guò)Openmobster推送給手機(jī)終端。
③ 終端這邊后臺(tái)模塊中的服務(wù)同樣建立了對(duì)應(yīng)云端Channel的處理,一旦收到Channel的下發(fā)通知,通過(guò)發(fā)送Intent的方式啟動(dòng)一個(gè)Activity[4],這個(gè)Activity在啟動(dòng)過(guò)程中可以通過(guò)bean的相關(guān)接口讀出對(duì)應(yīng)用戶名和通道下發(fā)的bean對(duì)象,通過(guò)bean的一些方法解析并獲取下發(fā)通知中的各功能項(xiàng)數(shù)據(jù)字段,調(diào)用Android平臺(tái)提供的各接口,完成對(duì)手機(jī)的遠(yuǎn)程控制功能。
④將遠(yuǎn)程控制處理的結(jié)果封裝到一個(gè)新的bean對(duì)象里,然后注冊(cè)一個(gè)用于上傳的Channel,對(duì)數(shù)據(jù)包進(jìn)行分塊處理,最終將所有分塊上傳到服務(wù)器的數(shù)據(jù)庫(kù)。
圖4 定位追蹤功能實(shí)現(xiàn)流程圖
⑤ 從服務(wù)器下載并合并各個(gè)數(shù)據(jù)塊,獲取上傳到服務(wù)器的數(shù)據(jù)信息。
本文通過(guò)對(duì)Openmobster手機(jī)云計(jì)算平臺(tái)的研究,結(jié)合Android智能移動(dòng)終端,設(shè)計(jì)了開發(fā)移動(dòng)云應(yīng)用的基礎(chǔ)架構(gòu),由于該平臺(tái)自身的限制,不能同時(shí)管理多個(gè)手機(jī)客戶端,基于此缺陷設(shè)計(jì)了一種拓?fù)浣Y(jié)構(gòu),在服務(wù)器側(cè)連接了Mysql數(shù)據(jù)庫(kù),用于數(shù)據(jù)的存儲(chǔ)和管理,使不同的用戶將數(shù)據(jù)上傳到不同的服務(wù)器數(shù)據(jù)庫(kù),最后再將這些數(shù)據(jù)匯總到一個(gè)數(shù)據(jù)庫(kù)服務(wù)器,達(dá)到數(shù)據(jù)共享的目標(biāo)。另外,通過(guò)對(duì)該平臺(tái)控制臺(tái)代碼的研究,將該平臺(tái)的控制臺(tái)改造成網(wǎng)頁(yè)的形式,極大地方便了服務(wù)器跟手機(jī)客戶端之間的交互操作。
最后,利用該架構(gòu)實(shí)現(xiàn)了一個(gè)追蹤定位的應(yīng)用實(shí)例,不僅安全可靠,而且方便有效。最大程度地滿足了用戶的需求,更驗(yàn)證了該架構(gòu)具有極高的研究?jī)r(jià)值和意義。
本文設(shè)計(jì)的開發(fā)移動(dòng)云應(yīng)用的基礎(chǔ)架構(gòu),既具有傳統(tǒng)的C/S模式和B/S模式的優(yōu)異功能,同時(shí)又結(jié)合了最先進(jìn)的移動(dòng)“云”計(jì)算的設(shè)計(jì)理念。在服務(wù)器端使用了Openmobster手機(jī)云平臺(tái),該平臺(tái)的底層支持功能強(qiáng)大,為系統(tǒng)的通信連接,即數(shù)據(jù)的上傳與下發(fā),提供了良好的保障??蛻舳瞬捎肁ndroid手機(jī)平臺(tái),由于Android提供了豐富的接口,具有良好的可擴(kuò)展性[5]。但是不能忽視的是,設(shè)計(jì)目前還存在很多漏洞,比如平臺(tái)的數(shù)據(jù)同步算法、數(shù)據(jù)上傳的效率等問題。這些漏洞和不足,將會(huì)是筆者以后繼續(xù)研究的方向。
[1]王鵬,董靜宜.一種云計(jì)算架構(gòu)的實(shí)現(xiàn)方法研究[J].計(jì)算機(jī)工程與科學(xué),2009,31(1):11-13.
[2]江燕良.基于Android智能終端的遠(yuǎn)程控制系統(tǒng)[J].電子技術(shù)應(yīng)用,2012,38(8):129-132.
[3]姚顯星,劉衛(wèi)國(guó).Android的架構(gòu)與應(yīng)用開發(fā)研究[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2008(11):76-79.
[4]耿東久,索岳,陳渝,等.基于Android手機(jī)的遠(yuǎn)程訪問和控制系統(tǒng)[J].計(jì)算機(jī)應(yīng)用,2011,31(2):559-561.
[5]張京,劉甫迎.基于Android云計(jì)算消息框架(C2DM)的FoxNews_M(jìn)ID手持移動(dòng)系統(tǒng)的研究[J].計(jì)算機(jī)科學(xué),2011,38(10A):461-463.