劉力維
摘? 要:文章介紹了一種在安卓平臺上實現基于HTTP協議數據網關的方法,并詳細闡述了數據網關與終端網絡設備之間數據傳輸的實現過程。
關鍵詞:安卓平臺;服務器;應用開發
中圖分類號:TP311? ? ? ? ?文獻標志碼:A? ? ? ? ?文章編號:2095-2945(2020)34-0086-02
Abstract: This paper introduces a method of implementing data gateway based on HTTP protocol on Android platform, and elaborates the implementation process of data transmission between data gateway and terminal network equipment.
Keywords: Android platform; server; application development
1 HTTP數據網關功能概述
數據網關廣泛應用于各種網絡數據采集與傳輸系統,為終端網絡設備提供數據傳輸的接口,實現對終端網絡設備發起的數據傳輸請求的解析和響應。HTTP協議是一種典型的基于請求、響應機制的應用層協議,通過對協議報文的構造,可以方便地將HTTP協議用于實現數據網關各項功能。
隨著移動智能設備的普及,安卓在嵌入式系統中獲得了越來越廣泛的應用。本文介紹的數據網關就是一個實現了HTTP數據服務器功能的安卓應用系統。系統功能框圖如圖1所示。數據網關和終端網絡設備之間通過HTTP協議進行數據通信,接收終端網絡設備的數據傳輸請求,并負責向終端網絡設備發出正確的響應。數據網關作為終端設備的數據服務器,其數據通常來源于本地或網絡數據庫存儲的數據,在網絡采集與傳輸系統中,數據也可能獲取自單獨的數據采集設備。
2 數據網關與終端設備之間的數據傳輸過程
數據網關與終端網絡設備之間的數據傳輸過程可以按功能分解為兩個主要部分,如圖2所示。
首先是數據的封裝及解析過程。在網絡終端設備上,進行數據發送前,需要將發送數據按照一定格式進行封裝,以便數據網關接收數據后能夠通過解析過程得到正確的數據。在數據網關向網絡終端設備發送響應報文時同樣需要數據的封裝和解析過程。
第二部分功能是基于HTTP協議的網絡報文收發。具體包括終端網絡設備向數據網關發送HTTP請求;數據網關對該HTTP請求的接收;數據網關向網絡終端設備發送HTTP響應以及終端網絡設備接收處理HTTP響應的過程。安卓平臺上使用HTTP客戶端相關類和方法實現終端網絡設備功能相對來說比較簡單,本文主要分析數據網關上述數據傳輸過程的具體實現。
3 數據封裝的實現
終端網絡設備與數據網關之間傳輸的數據通常包含多種類型。為了實現對多種類型數據的傳輸,在HTTP數據包中采用了JSON數據格式對數據進行封裝[1]。數據傳輸過程如下:
終端網絡設備構造HTTP POST請求發送給數據網關,將傳輸數據以JSON對象的形式封裝入HTTP請求的消息實體中。通過put方法可以向一個JSON對象添加數據。JSON對象內部包含多個鍵值對,用來描述具體的請求數據。
在數據網關上,首先從接收到的HTTP請求得到消息實體,然后使用JSON對象的getString等方法對消息實體進行解析,即可得到具體的請求數據。
在數據網關發送給終端網絡設備的HTTP響應數據包中,同樣可以進行JSON對象的封裝,并由終端網絡設備進行解析,以實現HTTP響應報文的數據傳遞。
4 數據網關上HTTP協議數據處理的實現
數據網關通過NanoHTTPD實現了HTTP服務器功能。NanoHTTPD是一個免費、輕量級的HTTP服務器,支持多種HTTP請求,通過幾個主要方法和類實現對客戶端連接請求的偵聽和數據的傳輸。
實現HTTP網絡數據傳輸的第一步,是建立客戶端與服務器間的TCP連接并在適當的時候斷開該連接。在建立TCP連接的過程中,終端網絡設備作為客戶端,其任務比較簡單:發起連接請求,等待服務器的響應并完成握手。數據網關作為服務器,負責TCP連接的偵聽、建立和維護工作。在NanoHTTPD中,這部分工作主要在start方法中完成。首先,創建ServerSocket類的實例,并綁定本HTTP連接的主機IP地址和所使用的端口號。接著,在start方法中創建線程,并改寫線程的run方法,用于等待并接收客戶端的連接。在run方法中首先調用ServerSocket的accept方法,程序將阻塞在這里偵聽客戶端的連接請求。當有客戶端請求連接時,程序繼續運行,設置HTTP session的Keep Alive時間。一旦客戶端與服務器之間的HTTP連接持續處于空閑狀態超過該時間,服務器將關閉該HTTP連接。
在start方法創建線程并接收客戶端的連接請求后,通過得到的Socket實例創建用于數據收發的輸入輸出流,并通過AsyncRunner創建一個獨立的線程,來處理這個新的客戶端連接。新線程首先創建一個本地臨時文件,該文件將在后面用于存儲客戶端上傳的數據。然后,創建對應該連接的HttpSession,并將臨時文件和輸入輸出流作為輸入參數傳遞給該session。最后,通過while循環執行 HttpSession的exec方法進行客戶端數據處理,只要該客戶端連接沒有被關閉,該方法將被循環調用。HttpSession的execute方法主要功能是對接收到的客戶端數據進行處理,解析出HTTP請求消息的頭域信息和消息實體信息。對于本文中的HTTP網絡數據傳輸應用,消息實體中存放的是終端網絡設備HTTP請求的具體內容。通過改寫exec方法調用的serve方法,實現終端網絡設備封裝的JSON對象的解析,可以得到終端網絡設備發送的具體請求。通過上述過程,實現了終端網絡設備到數據網關的一次完整數據請求。
數據網關向終端網絡設備發送HTTP響應的過程與前述過程類似,這里不再贅述。
5 HTTP數據網關的應用
本文中的數據網關采用HTTP協議,基于IP地址或域名實現網絡數據傳輸。該方法既可以應用于有線局域網,也可以基于Wi-Fi等無線網絡技術[2]實現移動終端設備與數據網關間的數據傳輸。如果為數據網關分配公網域名和IP地址,則可實現基于廣域網的遠程數據傳輸。
參考文獻:
[1]龔建華.JSON格式數據在Web開發中的應用[J].辦公自動化:綜合月刊,2013(20):46-48.
[2]李立芬.基于Wi-Fi技術在電信業務中的應用[J].中國多媒體通信,2012(12):67-68.
[3]宋銳星,朱小勇,胡琳琳,等.HTTP媒體傳輸方式簡述[J].網絡新媒體技術,2020,9(03):61-67.