一種gps數據入庫處理方法和系統的製作方法
2023-06-02 13:56:56 3
一種gps數據入庫處理方法和系統的製作方法
【專利摘要】本發明提供一種GPS數據入庫處理方法,通過I/O完成埠技術實現底層的通訊網關與TCP服務端之間傳輸GPS報文,使用報文任務池和工作線程池處理報文後分級緩存、批量寫入資料庫並完善錯誤處理。本發明的優點在於,不僅提高了系統性能和數據傳輸量,而且避免了傳輸過程的數據堵塞,同時在實際應用中提升了對海量GPS數據處理的完整性。
【專利說明】一種GPS數據入庫處理方法和系統
【技術領域】
[0001] 本發明涉及一種數據入庫處理方法,更具體地說涉及一種海量GPS數據入庫的處 理方法。
【背景技術】
[0002] 目前行業內,GPS數據處理入庫平臺所接入數量達到海量GPS報文數量級的比較 少,一般是作為系統的一部分。對於接收報文、處理報文並展示到客戶端,現在並未將這個 環節作為單獨的一個服務,劃分為整個大型系統中的一個重要模塊進行優化,所以就會存 在著一些缺陷。現有技術存在的缺點有以下幾點 :
[0003] 1、通訊網關接收到GPS終端的數據後,直接處理報文併入庫,處理報文和入庫的 環節會佔用大部分的資源,並容易因此阻塞接收的隊列,造成隊列滿,報文丟失,降低通訊 網關接收終端報文的負載量;
[0004] 2、通訊網關直接入庫,中間環節需要緩存接收報文的隊列、處理報文的隊列、處理 完等待入庫的數據的隊列,內存負荷很容易達到極限,影響處理數據的吞吐量;
[0005] 3、資料庫的連接數有限,連接數過多時,操作資料庫時可能產生資源衝突和競爭 的機率越大,一個庫所能接入的入庫服務是有限的,通訊網關的數目受到限制,無法進行負 載均衡。
【發明內容】
[0006] 本發明要解決的技術問題之一,在於提供一種GPS數據入庫處理方法,通過I/O 完成埠技術實現底層的通訊網關與TCP服務端之間傳輸GPS報文,並使用報文任務池和 工作線程池處理報文後批量寫入資料庫並完善錯誤處理,不僅提高了系統性能和數據傳輸 量,而且避免了傳輸過程的數據堵塞,同時在實際應用中提升了對海量GPS報文入庫錯誤 處理的完整性。
[0007] 本發明要解決的技術問題之一,一種GPS數據入庫處理方法是這樣實現的:所述 方法包括I/O完成埠技術傳輸GPS報文的過程、報文任務池和工作線程池處理GPS報文 的過程、GPS報文入庫的過程和完善GPS報文入庫錯誤處理的過程:
[0008] 所述I/O完成埠技術傳輸GPS報文的過程是:通訊網關作為客戶端,將GPS報文 封裝在複數個數據傳輸socket中,GPS數據入庫處理系統作為TCP服務端,客戶端將所述 複數個數據傳輸socket通過計算機的埠發送到TCP服務端完成GPS報文的接收,具體步 驟如下:
[0009] 步驟11、初始化後,在所述服務端上創建一偵聽socket,並將所述偵聽socket與 服務端的一個埠綁定,以便實現GPS報文的一對多傳輸;
[0010] 步驟12、在TCP服務端上創建一個SocketAsyncEventArgs類的連接對象,將所述 連接對象與所述偵聽socket綁定,所述連接對象開始異步檢測與其綁定的埠中是否有 數據傳輸socket接入:當有一個所述數據傳輸socket請求連接時,所述連接對象就接入該 數據傳輸socket,而所述偵聽socket則繼續檢測與其綁定的埠;
[0011] 步驟13、在TCP服務端上創建一個SocketAsyncEventArgs類的接收對象,所述接 收對象與接入的數據傳輸socket進行綁定,並開始接收GPS報文:若接收到的GPS報文的 數據長度等於零,則關閉對應接入的數據傳輸socket並釋放與其綁定的接收對象;若接收 到的GPS報文的數據長度大於零,則進行粘包處理:如果接收到的GPS報文的數據包是完整 的,直接放入報文緩衝隊列,如果接收到的GPS報文的數據包是不完整的,則先放入接收緩 衝區等待繼續接收直至數據包完整再放入報文緩衝隊列;
[0012] 步驟14、TCP服務端收到GPS報文後,根據所接收GPS報文的先後順序依次做出收 包正常的應答返回給客戶端;
[0013] 所述報文任務池和工作線程池處理GPS報文的過程包括:
[0014] 步驟21、在TCP服務端上創建複數個報文解析線程對報文緩衝隊列中的GPS報 文進行解析,根據解析得到的不同類型,所述報文解析線程將各不同類型的GPS報文放入 到報文任務池的複數個報文隊列中,所述複數個報文隊列與各不同類型的GPS報文一一對 應;
[0015] 步驟22、所述報文任務池的各報文隊列均採用雙緩衝概念實現讀寫分離:各報文 隊列均對應兩個任務池緩存區,分別是任務池緩存區1和任務池緩存區2,先將各報文隊列 中的GPS報文寫入與其對應的任務池緩存區1,當GPS報文入庫處理比較慢或者TCP服務端 連接數非常多的情況下,任務池緩存區1內的GPS報文會慢慢堆積,達到最大值,這時各報 文隊列中餘下的GPS報文會寫入到與其對應的任務池緩存區2,最後從各報文隊列對應的 任務池緩存區1和任務池緩存區2中批量讀取出GPS報文,對應寫入到各報文隊列的緩存 文件中;
[0016] 步驟23、所述工作線程池根據報文任務池中不同類型的報文隊列相應配置至少一 個工作處理線程,工作處理線程負責將步驟22所述各報文隊列對應的緩存文件中的GPS報 文讀取出來並進行相應的處理;
[0017] 所述GPS報文入庫的過程是:TCP伺服器調用數據訪問層,批量寫入所述處理好的 GPS報文到資料庫;
[0018] 所述完善GPS報文入庫錯誤處理的過程:
[0019] 在GPS報文入庫時,若出現SQL語句執行出錯,將執行錯誤的GPS報文寫入到報文 任務池中的錯誤緩存隊列進行處理:如果遇到的是網絡問題,則再重複執行該所述SQL語 句兩次,仍然錯誤的情況下,在系統中創建錯誤緩存文件,將GPS報文寫入所述錯誤緩存文 件中,如果是該所述SQL語句本身有問題,則直接將GPS報文寫入錯誤緩存文件,以備回收 或者用戶排查錯誤原因。
[0020] 進一步的,所述報文任務池的各報文隊列處理GPS報文數量超過與其對應的兩個 任務池緩存區的容量時,各報文隊列中等待入庫的GPS報文先寫入到各報文隊列的緩存文 件中,通過創建監測線程定時讀取系統CPU的佔用情況:當系統CPU佔用率低於百分之 二十時,利用信號量來通知工作處理線程回收所述各報文隊列對應的緩存文件。
[0021] 進一步的,所述方法中還包括報警簡訊服務,所述工作處理線程將GPS報文中的 報警報文解析出來後,根據用戶設定的報警條件判斷是否需要報警,如果滿足報警條件,則 發送報警簡訊給對應的聯繫人。
[0022] 進一步的,所述方法中還包括日誌查看,在整個GPS報文入庫過程中,用戶都可以 查看日誌,所述日誌分為主日誌、報警簡訊日誌、緩存回收日誌和錯誤處理日誌,把它們按 日期分文件夾保存,這樣分開保存、分開查看,既減少用戶檢索日誌的時間又方便查看日誌 的詳細信息。
[0023] 本發明要解決的技術問題之二,在於提供一種GPS數據入庫處理系統,通過I/O 完成埠技術實現底層的通訊網關與TCP服務端之間傳輸GPS報文,並使用報文任務池和 工作線程池處理報文後批量寫入資料庫並完善錯誤處理,不僅提高了系統性能和數據傳輸 量,而且避免了傳輸過程的數據堵塞,同時在實際應用中提升了對海量GPS報文入庫錯誤 處理的完整性。
[0024] 本發明要解決的技術問題之二,一種GPS數據入庫處理系統是這樣實現的:所述 系統包括TCP報文接收模塊、報文處理模塊、數據入庫模塊和錯誤處理模塊:
[0025] 所述TCP報文接收模塊:通過I/O完成埠技術傳輸GPS報文:通訊網關作為客戶 端,將GPS報文封裝在複數個數據傳輸socket中,GPS數據入庫處理系統作為TCP服務端, 客戶端將所述複數個數據傳輸socket通過計算機的埠發送到TCP服務端完成GPS報文 的接收,具體步驟如下:
[0026] 步驟11、初始化後,在所述服務端上創建一偵聽socket,並將所述偵聽socket與 服務端的一個埠綁定,以便實現GPS報文的一對多傳輸;
[0027] 步驟12、在TCP服務端上創建一個SocketAsyncEventArgs類的連接對象,將所述 連接對象與所述偵聽socket綁定,所述連接對象開始異步檢測與其綁定的埠中是否有 數據傳輸socket接入:當有一個所述數據傳輸socket請求連接時,所述連接對象就接入該 數據傳輸socket,而所述偵聽socket則繼續檢測與其綁定的埠;
[0028] 步驟13、在TCP服務端上創建一個SocketAsyncEventArgs類的接收對象,所述接 收對象與接入的數據傳輸socket進行綁定,並開始接收GPS報文:若接收到的GPS報文的 數據長度等於零,則關閉對應接入的數據傳輸socket並釋放與其綁定的接收對象;若接收 到的GPS報文的數據長度大於零,則進行粘包處理:如果接收到的GPS報文的數據包是完整 的,直接放入報文緩衝隊列,如果接收到的GPS報文的數據包是不完整的,則先放入接收緩 衝區等待繼續接收直至數據包完整再放入報文緩衝隊列;
[0029] 步驟14、TCP服務端收到GPS報文後,根據所接收GPS報文的先後順序依次做出收 包正常的應答返回給客戶端;
[0030] 所述報文處理模塊:通過報文任務池和工作線程池處理GPS報文,具體包括:
[0031] 步驟21、在TCP服務端上創建複數個報文解析線程對報文緩衝隊列中的GPS報 文進行解析,根據解析得到的不同類型,所述報文解析線程將各不同類型的GPS報文放入 到報文任務池的複數個報文隊列中,所述複數個報文隊列與各不同類型的GPS報文一一對 應;
[0032] 步驟22、所述報文任務池的各報文隊列均採用雙緩衝概念實現讀寫分離:各報文 隊列均對應兩個任務池緩存區,分別是任務池緩存區1和任務池緩存區2,先將各報文隊列 中的GPS報文寫入與其對應的任務池緩存區1,當GPS報文入庫處理比較慢或者TCP服務端 連接數非常多的情況下,任務池緩存區1內的GPS報文會慢慢堆積,達到最大值,這時各報 文隊列中餘下的GPS報文會寫入到與其對應的任務池緩存區2,最後從各報文隊列對應的 任務池緩存區1和任務池緩存區2中批量讀取出GPS報文,對應寫入到各報文隊列對應的 緩存文件中;
[0033] 步驟23、所述工作線程池根據報文任務池中不同類型的報文隊列相應配置至少一 個工作處理線程,工作處理線程負責將步驟22所述各報文隊列的緩存文件中的GPS報文讀 取出來並進行相應的處理;
[0034] 所述數據入庫模塊:TCP服務端調用數據訪問層,批量寫入GPS報文到資料庫;
[0035] 所述錯誤處理模塊:在GPS報文入庫時,若出現SQL語句執行出錯,將執行錯誤的 GPS報文寫入到報文任務池中的錯誤緩存隊列進行處理:如果遇到的是網絡問題,則再重 復執行該所述SQL語句兩次,仍然錯誤的情況下,在系統中創建錯誤緩存文件,將GPS報文 寫入所述錯誤緩存文件中,如果是該所述SQL語句本身有問題,則直接將GPS報文寫入錯誤 緩存文件,以備回收或者用戶排查錯誤原因。
[0036] 進一步的,所述報文任務池的各報文隊列處理GPS報文數量超過與其對應的兩個 任務池緩存區的容量時,各報文隊列中等待入庫的GPS報文先寫入到各報文隊列的緩存文 件中,通過創建監測線程定時讀取系統CPU的佔用情況:當系統CPU佔用率低於百分之 二十時,利用信號量來通知工作處理線程回收所述各報文隊列對應的緩存文件。
[0037] 進一步的,所述系統中還包括報警簡訊服務模塊:所述工作處理線程將GPS報文 中的報警報文解析出來後,根據用戶設定的報警條件判斷是否需要報警,如果滿足報警條 件,則發送報警簡訊給對應的聯繫人。
[0038] 進一步的,所述系統中還包括日誌模塊,在整個GPS報文入庫過程中,用戶都可以 查看日誌,所述日誌分為主日誌、報警簡訊日誌、緩存回收日誌和錯誤處理日誌,把它們按 日期分文件夾保存,這樣分開保存、分開查看,既減少用戶檢索日誌的時間又方便查看日誌 的詳細信息。
[0039] 本發明具有如下優點:
[0040] 1、通過I/O完成埠技術實現通訊網關與TCP服務端之間傳輸GPS報文:提高 了系統性能和傳輸數據的吞吐量,可以支持一對多的架構,便於底層平臺擴展,實現負載均 衡;
[0041] 2、使用報文任務池和工作線程池:避免了處理報文環節引起的傳輸環節的數據堵 塞,提高系統吞吐量;線程數目可以根據需要配置,最大程度的利用伺服器資源;可以縮短 任務請求的響應時間;
[0042] 3、分級緩存,批量寫入機制:降低了對資料庫的訪問頻率,也提高了入庫的效率;
[0043] 4、錯誤緩存機制:便於事後故障原因分析和排查,提升了在實際應用中對海量 GPS數據處理的完整性。
【專利附圖】
【附圖說明】
[0044] 下面參照附圖結合實施例對本發明作進一步的說明。
[0045] 圖1為本發明系統的應用示意圖。
[0046] 圖2為本發明方法的GPS報文接收流程圖。
[0047] 圖3為本發明方法一實施例粘包算法示意圖。
[0048] 圖4為本發明方法的數據處理與入庫示意圖。
[0049] 圖5為本發明方法一實施例寫入GPS報文示意圖。
[0050] 圖6為本發明方法一實施例讀取GPS報文示意圖。
【具體實施方式】
[0051] 請參照圖1所示的系統應用示意圖,本發明一種GPS數據入庫處理系統,可以接 收來自通訊網關的GPS報文並進行處理後再放入資料庫,該系統廣泛應用於各種車載系統 中。
[0052] 本發明一種GPS數據入庫處理方法具體包括:I/O完成埠技術傳輸GPS報文的 過程、報文任務池和工作線程池處理GPS報文的過程、GPS報文入庫的過程和完善GPS報文 入庫錯誤處理的過程:
[0053] 所述I/O完成埠技術傳輸GPS報文的過程是:通訊網關作為客戶端,將GPS報文 封裝在複數個數據傳輸socket中,GPS數據入庫處理系統作為TCP服務端,客戶端將所述 複數個數據傳輸socket通過計算機的埠發送到TCP服務端完成GPS報文的接收,具體步 驟如圖2所示:
[0054] 步驟11、初始化後,在所述服務端上創建一偵聽socket,並將所述偵聽socket與 服務端的一個埠綁定,以便實現GPS報文的一對多傳輸;
[0055] 步驟12、在TCP服務端上創建一個SocketAsyncEventArgs類(所述 SocketAsyncEventArgs類是· NET中封裝的異步socket類)的連接對象(所述連接對象可 以是acceptEventArgs對象),將所述連接對象與所述偵聽socket綁定,所述連接對象開始 異步檢測與其綁定的埠中是否有數據傳輸socket接入:當有一個所述數據傳輸socket 請求連接時,所述連接對象就接入該數據傳輸socket,而所述偵聽socket則繼續檢測與其 綁定的埠;
[0056] 步驟13、在TCP服務端上創建一個SocketAsyncEventArgs類的接收對象(所述接 收對象可以是ReceiveEventArgs對象),所述接收對象與接入的數據傳輸socket進行綁 定,並開始接收GPS報文:若接收到的GPS報文的數據長度等於零,則關閉對應接入的數據 傳輸socket並釋放與其綁定的接收對象;若接收到的GPS報文的數據長度大於零,則進行 粘包處理:如果接收到的GPS報文的數據包是完整的,直接放入報文緩衝隊列,如果接收到 的GPS報文的數據包是不完整的,則先放入接收緩衝區等待繼續接收直至數據包完整再放 入報文緩衝隊列;
[0057] 在本實施例中,所述粘包處理採用分包算法,主要過程如圖3所示:
[0058] 所述接收對象的緩衝區初始值設為4M,包括接收緩衝區和未使用區域,整個緩衝 區的大小可以根據作業系統及系統內存來調整。將接收對象的接收緩存區接收到的數據按 照開始位置和偏移量將數據取出,找到包頭標識及包長,按照包長進行分包,將完整的數據 包放入到數據包緩衝隊列,如果還有剩餘數據,循環的按照這個步驟分包,直至到達所述緩 衝區偏移量的位置:如果剛好數據是複數個完整的包,設置接收對象的接收緩衝區的接收 起始位置為〇,否則將未接收完整的包(殘包)拷貝到接收緩衝區的起始位置,設置起始位 置為殘包的長度,設置接收緩衝區大小為:緩衝區實際大小減去殘包長度;然後繼續接收, 繼續進行上述的分包步驟。因為在TCP傳輸過程中,發送方發送的若干數據到接收方接收 時通常會粘成一包,所以需要進行粘包處理;
[0059] 步驟14、TCP服務端收到GPS報文後,根據所接收GPS報文的先後順序依次做出收 包正常的應答返回給客戶端;
[0060] 請參照圖4,所述報文任務池和工作線程池處理GPS報文的過程如下:
[0061] 步驟21、在TCP服務端上創建複數個報文解析線程對報文緩衝隊列中的GPS報 文進行解析,根據解析得到的不同類型,所述報文解析線程將各不同類型的GPS報文放入 到報文任務池的複數個報文隊列中,所述複數個報文隊列與各不同類型的GPS報文一一對 應;
[0062] 如圖4所示,以創建四個報文解析線程為例,在TCP服務端上創建四個報文解析線 程對接收到的GPS報文進行解析,根據解析得到的不同類型,所述報文解析線程將各不同 類型的GPS報文放入到報文任務池對應的報文隊列中,包括定位報文隊列、報警報文隊列、 應答報文隊列、外設報文隊列和自檢報文隊列等;
[0063] 步驟22、所述報文任務池的各報文隊列均採用雙緩衝概念實現讀寫分離:各報文 隊列均對應兩個任務池緩存區,分別是任務池緩存區1和任務池緩存區2,先將各報文隊列 中的GPS報文寫入與其對應的任務池緩衝區1,當GPS報文入庫處理比較慢或者TCP服務端 連接數非常多的情況下,任務池緩存區1內的GPS報文會慢慢堆積,達到最大值,這時各報 文隊列中餘下的GPS報文會寫入到與其對應的任務池緩存區2,最後從各報文隊列對應的 任務池緩存區1和任務池緩存區2中批量讀取出GPS報文,對應寫入到各報文隊列的緩存 文件中;
[0064] 現舉例說明一報文隊列通過兩個任務池緩存區實現寫入GPS報文和讀取GPS報文 過程:
[0065] 所述寫入GPS報文的過程如圖5所示:
[0066] 步驟221、先設置任務池緩存區序號bufflD ;
[0067] 步驟222、若bufflD = 1,將報文隊列中的GPS報文添加到任務池緩存區1,當任務 池緩存區1內的GPS報文達到最大值時,設置bufflD = 2,此時報文隊列中餘下的GPS報文 會寫入到任務池緩存區2中;若bufflD = 2,將報文隊列中的GPS報文添加到任務池緩存 區2,當任務池緩存區2內的GPS報文達到最大值時,設置bufflD = 1,此時報文隊列中餘 下的GPS報文會寫入到任務池緩存區1中;
[0068] 步驟223、寫入完GPS報文後設置寫緩存線程信號量;
[0069] 所述讀取GPS報文過程如圖6所示:
[0070] 步驟224、讀取寫緩存線程信號量;
[0071] 步驟225、若bufflD = 2,讀取任務池緩存區1內的GPS報文,若bufflD = 1,讀取 任務池緩存區2內的GPS報文;
[0072] 步驟226、將從兩個任務池緩存區內取出的GPS報文寫入到報文隊列的緩存文件 中;
[0073] 步驟227、獲取所述報文隊列的緩存文件名稱;
[0074] 步驟228、依據報文隊列的緩存文件名稱判斷該緩存目錄所在的磁碟空間容量,若 所述容量小於等於100M,則發送告警郵件並丟棄該緩存文件中的GPS報文,若所述容量大 於100M,則仍然將GPS報文寫入到報文隊列的緩存文件中;
[0075] 但是,當報文任務池的各報文隊列處理GPS報文數量超過與其對應的兩個任務池 緩存區的容量時,各報文隊列中等待入庫的GPS報文先寫入到各報文隊列的緩存文件中, 通過創建監測線程定時讀取系統CPU的佔用情況:當系統CPU佔用率低於百分之二十時, 利用信號量來通知工作處理線程回收所述各報文隊列對應的緩存文件;
[0076] 步驟23、所述工作線程池根據報文任務池中不同類型的報文隊列相應配置至少一 個工作處理線程,例如定位報文隊列配置八個定位報文處理線程,報警報文隊列配置四個 報警報文處理線程等(請參閱圖4);工作處理線程負責將步驟22所述各報文隊列對應的 緩存文件中的GPS報文讀取出來並進行相應的處理,例如報警報文,工作線程將報警報文 解析出來後根據用戶設定的報警條件判斷是否需要下發報警,如果需要,則發送報警簡訊 給對應的聯繫人;
[0077] 所述GPS報文入庫的過程是:TCP伺服器調用數據訪問層,批量寫入所述處理好的 GPS報文到資料庫;
[0078] 所述完善GPS報文入庫錯誤處理的過程:
[0079] 在GPS報文入庫時,若出現SQL語句執行出錯,將執行錯誤的GPS報文寫入到報文 任務池中的錯誤緩存隊列進行處理:如果遇到的是網絡問題,則再重複執行該所述SQL語 句兩次,仍然錯誤的情況下,在系統中創建錯誤緩存文件,將GPS報文寫入所述錯誤緩存文 件中,如果是該所述SQL語句本身有問題,則直接將GPS報文寫入錯誤緩存文件,以備回收 或者用戶排查錯誤原因。
[0080] 在整個GPS報文入庫過程中,用戶都可以查看日誌,所述日誌分為主日誌、報警短 信日誌、緩存回收日誌和錯誤處理日誌,把它們按日期分文件夾保存,這樣分開保存、分開 查看,既減少用戶檢索日誌的時間又方便查看日誌的詳細信息。
[0081] 基於以上方法,本發明一種GPS數據入庫處理系統,包括TCP報文接收模塊、報文 處理模塊、數據入庫模塊和錯誤處理模塊:
[0082] 所述TCP報文接收模塊:通過I/O完成埠技術傳輸GPS報文:通訊網關作為客戶 端,將GPS報文封裝在複數個數據傳輸socket中,GPS數據入庫處理系統作為TCP服務端, 客戶端將所述複數個數據傳輸socket通過計算機的埠發送到TCP服務端完成GPS報文 的接收,具體步驟如下:
[0083] 步驟11、初始化後,在所述服務端上創建一偵聽socket,並將所述偵聽socket與 服務端的一個埠綁定,以便實現GPS報文的一對多傳輸;
[0084] 步驟12、在TCP服務端上創建一個SocketAsyncEventArgs類的連接對象,將所述 連接對象與所述偵聽socket綁定,所述連接對象開始異步檢測與其綁定的埠中是否有 數據傳輸socket接入:當有一個所述數據傳輸socket請求連接時,所述連接對象就接入該 數據傳輸socket,而所述偵聽socket則繼續檢測與其綁定的埠;
[0085] 步驟13、在TCP服務端上創建一個SocketAsyncEventArgs類的接收對象,所述接 收對象與接入的數據傳輸socket進行綁定,並開始接收GPS報文:若接收到的GPS報文的 數據長度等於零,則關閉對應接入的數據傳輸socket並釋放與其綁定的接收對象;若接收 到的GPS報文的數據長度大於零,則進行粘包處理:如果接收到的GPS報文的數據包是完整 的,直接放入報文緩衝隊列,如果接收到的GPS報文的數據包是不完整的,則先放入接收緩 衝區等待繼續接收直至數據包完整再放入報文緩衝隊列;
[0086] 步驟14、TCP服務端收到GPS報文後,根據所接收GPS報文的先後順序依次做出收 包正常的應答返回給客戶端;
[0087] 所述報文處理模塊:通過報文任務池和工作線程池處理GPS報文,具體包括:
[0088] 步驟21、在TCP服務端上創建複數個報文解析線程對報文緩衝隊列中的GPS報 文進行解析,根據解析得到的不同類型,所述報文解析線程將各不同類型的GPS報文放入 到報文任務池的複數個報文隊列中,所述複數個報文隊列與各不同類型的GPS報文一一對 應;
[0089] 步驟22、所述報文任務池的各報文隊列均採用雙緩衝概念實現讀寫分離:各報文 隊列均對應兩個任務池緩存區,分別是任務池緩存區1和任務池緩存區2,先將各報文隊列 中的GPS報文寫入與其對應的任務池緩存區1,當GPS報文入庫處理比較慢或者TCP服務端 連接數非常多的情況下,任務池緩存區1內的GPS報文會慢慢堆積,達到最大值,這時各報 文隊列中餘下的GPS報文會寫入到與其對應的任務池緩存區2,最後從各報文隊列對應的 任務池緩存區1和任務池緩存區2中批量讀取出GPS報文,對應寫入到各報文隊列的緩存 文件中;
[0090] 但是,當報文任務池的各報文隊列處理GPS報文數量超過與其對應的兩個任務池 緩存區的容量時,各報文隊列中等待入庫的GPS報文先寫入到各報文隊列的緩存文件中, 通過創建監測線程定時讀取系統CPU的佔用情況:當系統CPU佔用率低於百分之二十時, 利用信號量來通知工作處理線程回收所述各報文隊列對應的緩存文件;
[0091] 步驟23、所述工作線程池根據報文任務池中不同類型的報文隊列相應配置至少一 個工作處理線程,工作處理線程負責將步驟22所述各報文隊列對應的緩存文件中的GPS報 文讀取出來並進行相應的處理;
[0092] 所述數據入庫模塊:TCP服務端調用數據訪問層,批量寫入GPS報文到資料庫;
[0093] 所述錯誤處理模塊:在GPS報文入庫時,若出現SQL語句執行出錯,將執行錯誤的 GPS報文寫入到報文任務池中的錯誤緩存隊列進行處理:如果遇到的是網絡問題,則再重 復執行該所述SQL語句兩次,仍然錯誤的情況下,在系統中創建錯誤緩存文件,將GPS報文 寫入所述錯誤緩存文件中,如果是該所述SQL語句本身有問題,則直接將GPS報文寫入錯誤 緩存文件,以備回收或者用戶排查錯誤原因。
[0094] 報警簡訊服務模塊:所述工作處理線程將GPS報文中的報警報文解析出來後,根 據用戶設定的報警條件判斷是否需要報警,如果滿足報警條件,則發送報警簡訊給對應的 聯繫人。
[0095] 日誌模塊:在整個GPS報文入庫過程中,用戶都可以查看日誌,所述日誌分為主日 志、報警簡訊日誌、緩存回收日誌和錯誤處理日誌,把它們按日期分文件夾保存,這樣分開 保存、分開查看,既減少用戶檢索日誌的時間又方便查看日誌的詳細信息。
[0096] 雖然以上描述了本發明的【具體實施方式】,但是熟悉本【技術領域】的技術人員應當理 解,我們所描述的具體的實施例只是說明性的,而不是用於對本發明的範圍的限定,熟悉本 領域的技術人員在依照本發明的精神所作的等效的修飾以及變化,都應當涵蓋在本發明的 權利要求所保護的範圍內。
【權利要求】
1. 一種GPS數據入庫處理方法,其特徵在於,所述方法包括I/O完成埠技術傳輸GPS 報文的過程、報文任務池和工作線程池處理GPS報文的過程、GPS報文入庫的過程和完善 GPS報文入庫錯誤處理的過程: 所述I/O完成埠技術傳輸GPS報文的過程是:通訊網關作為客戶端,將GPS報文封裝 在複數個數據傳輸socket中,GPS數據入庫處理系統作為TCP服務端,客戶端將所述複數 個數據傳輸socket通過計算機的埠發送到TCP服務端完成GPS報文的接收,具體步驟如 下: 步驟11、初始化後,在所述服務端上創建一偵聽socket,並將所述偵聽socket與服務 端的一個埠綁定,以便實現GPS報文的一對多傳輸; 步驟12、在TCP服務端上創建一個SocketAsyncEventArgs類的連接對象,將所述連接 對象與所述偵聽socket綁定,所述連接對象開始異步檢測與其綁定的埠中是否有數據 傳輸socket接入:當有一個所述數據傳輸socket請求連接時,所述連接對象就接入該數據 傳輸socket,而所述偵聽socket則繼續檢測與其綁定的埠; 步驟13、在TCP服務端上創建一個SocketAsyncEventArgs類的接收對象,所述接收對 象與接入的數據傳輸socket進行綁定,並開始接收GPS報文:若接收到的GPS報文的數據 長度等於零,則關閉對應接入的數據傳輸socket並釋放與其綁定的接收對象;若接收到的 GPS報文的數據長度大於零,則進行粘包處理:如果接收到的GPS報文的數據包是完整的, 直接放入報文緩衝隊列,如果接收到的GPS報文的數據包是不完整的,則先放入接收緩衝 區等待繼續接收直至數據包完整再放入報文緩衝隊列; 步驟14、TCP服務端收到GPS報文後,根據所接收GPS報文的先後順序依次做出收包正 常的應答返回給客戶端; 所述報文任務池和工作線程池處理GPS報文的過程包括: 步驟21、在TCP服務端上創建複數個報文解析線程對報文緩衝隊列中的GPS報文進行 解析,根據解析得到的不同類型,所述報文解析線程將各不同類型的GPS報文放入到報文 任務池的複數個報文隊列中,所述複數個報文隊列與各不同類型的GPS報文一一對應; 步驟22、所述報文任務池的各報文隊列均採用雙緩衝概念實現讀寫分離:各報文隊列 均對應兩個任務池緩存區,分別是任務池緩存區1和任務池緩存區2,先將各報文隊列中的 GPS報文寫入與其對應的任務池緩存區1,當GPS報文入庫處理比較慢或者TCP服務端連接 數非常多的情況下,任務池緩存區1內的GPS報文會慢慢堆積,達到最大值,這時各報文隊 列中餘下的GPS報文會寫入到與其對應的任務池緩存區2,最後從各報文隊列對應的任務 池緩存區1和任務池緩存區2中批量讀取出GPS報文,對應寫入到各報文隊列的緩存文件 中; 步驟23、所述工作線程池根據報文任務池中不同類型的報文隊列相應配置至少一個工 作處理線程,工作處理線程負責將步驟22所述各報文隊列對應的緩存文件中的GPS報文讀 取出來並進行相應的處理; 所述GPS報文入庫的過程是:TCP伺服器調用數據訪問層,批量寫入所述處理好的GPS 報文到資料庫; 所述完善GPS報文入庫錯誤處理的過程: 在GPS報文入庫時,若出現SQL語句執行出錯,將執行錯誤的GPS報文寫入到報文任 務池中的錯誤緩存隊列進行處理:如果遇到的是網絡問題,則再重複執行該所述SQL語句 兩次,仍然錯誤的情況下,在系統中創建錯誤緩存文件,將GPS報文寫入所述錯誤緩存文件 中,如果是該所述SQL語句本身有問題,則直接將GPS報文寫入錯誤緩存文件,以備回收或 者用戶排查錯誤原因。
2. 根據權利要求1所述的一種GPS數據入庫處理方法,其特徵在於:所述步驟22還包 括,當報文任務池的各報文隊列處理GPS報文數量超過與其對應的兩個任務池緩存區的容 量時,各報文隊列中等待入庫的GPS報文先寫入到各報文隊列的緩存文件中,通過創建監 測線程定時讀取系統CPU的佔用情況:當系統CPU佔用率低於百分之二十時,利用信號量 來通知工作處理線程回收所述各報文隊列對應的緩存文件。
3. 根據權利要求1所述的一種GPS數據入庫處理方法,其特徵在於:所述步驟23包括 報警簡訊服務:所述工作處理線程將GPS報文中的報警報文解析出來後,根據用戶設定的 報警條件判斷是否需要報警,如果滿足報警條件,則發送報警簡訊給對應的聯繫人。
4. 根據權利要求1所述的一種GPS數據入庫處理方法,其特徵在於:在整個GPS報文 入庫過程中,用戶都能查看日誌,所述日誌分為主日誌、報警簡訊日誌、緩存回收日誌和錯 誤處理日誌,把它們按日期分文件夾保存,這樣分開保存、分開查看,既減少用戶檢索日誌 的時間又方便查看日誌的詳細信息。
5. -種GPS數據入庫處理系統,其特徵在於:所述系統包括TCP報文接收模塊、報文處 理模塊、數據入庫模塊和錯誤處理模塊: 所述TCP報文接收模塊:通過I/O完成埠技術傳輸GPS報文:通訊網關作為客戶端, 將GPS報文封裝在複數個數據傳輸socket中,GPS數據入庫處理系統作為TCP服務端,客 戶端將所述複數個數據傳輸socket通過計算機的埠發送到TCP服務端完成GPS報文的 接收,具體步驟如下: 步驟11、初始化後,在所述服務端上創建一偵聽socket,並將所述偵聽socket與服務 端的一個埠綁定,以便實現GPS報文的一對多傳輸; 步驟12、在TCP服務端上創建一個SocketAsyncEventArgs類的連接對象,將所述連接 對象與所述偵聽socket綁定,所述連接對象開始異步檢測與其綁定的埠中是否有數據 傳輸socket接入:當有一個所述數據傳輸socket請求連接時,所述連接對象就接入該數據 傳輸socket,而所述偵聽socket則繼續檢測與其綁定的埠; 步驟13、在TCP服務端上創建一個SocketAsyncEventArgs類的接收對象,所述接收對 象與接入的數據傳輸socket進行綁定,並開始接收GPS報文:若接收到的GPS報文的數據 長度等於零,則關閉對應接入的數據傳輸socket並釋放與其綁定的接收對象;若接收到的 GPS報文的數據長度大於零,則進行粘包處理:如果接收到的GPS報文的數據包是完整的, 直接放入報文緩衝隊列,如果接收到的GPS報文的數據包是不完整的,則先放入接收緩衝 區等待繼續接收直至數據包完整再放入報文緩衝隊列; 步驟14、TCP服務端收到GPS報文後,根據所接收GPS報文的先後順序依次做出收包正 常的應答返回給客戶端; 所述報文處理模塊:通過報文任務池和工作線程池處理GPS報文,具體包括: 步驟21、在TCP服務端上創建複數個報文解析線程對報文緩衝隊列中的GPS報文進行 解析,根據解析得到的不同類型,所述報文解析線程將各不同類型的GPS報文放入到報文 任務池的複數個報文隊列中,所述複數個報文隊列與各不同類型的GPS報文一一對應; 步驟22、所述報文任務池的各報文隊列均採用雙緩衝概念實現讀寫分離:各報文隊列 均對應兩個任務池緩存區,分別是任務池緩存區1和任務池緩存區2,先將各報文隊列中的 GPS報文寫入與其對應的任務池緩存區1,當GPS報文入庫處理比較慢或者TCP服務端連接 數非常多的情況下,任務池緩存區1內的GPS報文會慢慢堆積,達到最大值,這時各報文隊 列中餘下的GPS報文會寫入到與其對應的任務池緩存區2,最後從各報文隊列對應的任務 池緩存區1和任務池緩存區2中批量讀取出GPS報文,對應寫入到各報文隊列的緩存文件 中; 步驟23、所述工作線程池根據報文任務池中不同類型的報文隊列相應配置至少一個工 作處理線程,工作處理線程負責將步驟22所述各報文隊列對應的緩存文件中的GPS報文讀 取出來並進行相應的處理; 所述數據入庫模塊:TCP服務端調用數據訪問層,批量寫入GPS報文到資料庫; 所述錯誤處理模塊:在GPS報文入庫時,若出現SQL語句執行出錯,將執行錯誤的GPS 報文寫入到報文任務池中的錯誤緩存隊列進行處理:如果遇到的是網絡問題,則再重複執 行該所述SQL語句兩次,仍然錯誤的情況下,在系統中創建錯誤緩存文件,將GPS報文寫入 所述錯誤緩存文件中,如果是該所述SQL語句本身有問題,則直接將GPS報文寫入錯誤緩存 文件,以備回收或者用戶排查錯誤原因。
6. 根據權利要求5所述的一種GPS數據入庫處理系統,其特徵在於:所述報文任務池 的各報文隊列處理GPS報文數量超過與其對應的兩個任務池緩存區的容量時,各報文隊列 中等待入庫的GPS報文先寫入到各報文隊列的緩存文件中,通過創建監測線程定時讀取系 統CPU的佔用情況:當系統CPU佔用率低於百分之二十時,利用信號量來通知工作處理線 程回收所述各報文隊列對應的緩存文件。
7. 根據權利要求5所述的一種GPS數據入庫處理系統,其特徵在於:還包括報警簡訊 服務模塊:所述工作處理線程將GPS報文中的報警報文解析出來後,根據用戶設定的報警 條件判斷是否需要報警,如果滿足報警條件,則發送報警簡訊給對應的聯繫人。
8. 根據權利要求5所述的一種GPS數據入庫處理系統,其特徵在於:還包括日誌模塊, 在整個GPS報文入庫過程中,用戶都能查看日誌,所述日誌分為主日誌、報警簡訊日誌、緩 存回收日誌和錯誤處理日誌,把它們按日期分文件夾保存,這樣分開保存、分開查看,既減 少用戶檢索日誌的時間又方便查看日誌的詳細信息。
【文檔編號】H04L12/803GK104158757SQ201410414439
【公開日】2014年11月19日 申請日期:2014年8月21日 優先權日:2014年8月21日
【發明者】鄒山青, 魏軍福, 葉偉, 莊藝園, 陳建靈 申請人:福建星海通信科技有限公司