■ 湖北 吳征云 呼曉婷 舒忠
編者按:本文將介紹如何在建立數(shù)字樣張遠程傳輸系統(tǒng)仿真平臺的前提下,完成對任務(wù)續(xù)傳與自動重連功能的實現(xiàn)。
在 以SSL VPN安全策略構(gòu)建的互聯(lián)網(wǎng)通信平臺的基礎(chǔ)上,依據(jù)對印刷數(shù)字樣張遠程傳輸系統(tǒng)客戶端和服務(wù)器端功能的規(guī)劃設(shè)計,在完成系統(tǒng)實現(xiàn)后,為了提高系統(tǒng)的自動檢測與控制程度,需要為系統(tǒng)設(shè)計了任務(wù)續(xù)傳與自動重連功能模塊。
表1 仿真環(huán)境
圖1 服務(wù)器端任務(wù)保存
對系統(tǒng)的仿真環(huán)境見表1所示??蛻舳松蟼鹘o服務(wù)的文件,以任務(wù)為單位建立文件夾,文件夾名稱為任務(wù)ID,保存在:C://Duty(該路徑可以在系統(tǒng)配置中更改)目錄下。例如:任務(wù)的ID為“荊門-1”,在服務(wù)器的C://Duty下就會生成以“荊門-1”名稱的文件夾,對應(yīng)的上傳的文件都會保存在此處,如圖1所示。
1.客戶端由三個屬性構(gòu)成:任務(wù)、上傳、狀態(tài)組成,屬性直接相互關(guān)聯(lián)。
(1)任務(wù)屬性主要完成任務(wù)的初始化,明確任務(wù)來源、負責人以及任務(wù)的相關(guān)內(nèi)容;提供數(shù)據(jù)庫接口,方便配置及查詢。
(2)上傳屬性提供可選的服務(wù)器地址列表,支持多種文件選擇方式(單選、多選、跨路徑選擇),支持對已選文件的刪除,并能對圖像文件或avi文件進行預(yù)覽,以及選擇文件后的上傳。
(3)狀體屬性及時反饋任務(wù)狀態(tài)信息,以及任務(wù)排隊信息,并能查詢?nèi)蝿?wù)對應(yīng)的文件。
2.服務(wù)器端提供文件、配置和說明三個菜單選項,主界面是任務(wù)狀態(tài)顯示欄,客戶端發(fā)送的任務(wù)都會顯示在這個狀態(tài)欄中,反饋任務(wù)狀態(tài)信息。
(1)文件菜單提供系統(tǒng)啟動、關(guān)閉、退出功能。
(2)配置菜單提供數(shù)據(jù)配置、網(wǎng)絡(luò)配置。
(3)說明菜單簡單介紹系統(tǒng)。關(guān)任務(wù)狀態(tài)信息欄支持查詢每個任務(wù)對應(yīng)的文件信息。
3.仿真實驗主要側(cè)重于網(wǎng)絡(luò)中斷后自動重連。
4.為了方便與數(shù)據(jù)庫通信,提供了API接口。系統(tǒng)與數(shù)據(jù)庫相關(guān)部分主要包括:部門信息、任務(wù)信息、任務(wù)對應(yīng)文件信息。持有證書的部門可以加入通信系統(tǒng),客戶端提供接口,可以修改、增加、刪除部門信息。增加部門信息,要確保部門具有不同的IP地址??蛻舳藬?shù)據(jù)庫中部門信息,必須包含自己本身部門信息;同時也必須包含其他服務(wù)器部門信息,以IP地址相區(qū)分。通過API接口可以修改、增加和刪除部門信息。服務(wù)器部分也同樣提供API接口,只是對應(yīng)數(shù)據(jù)庫中只有服務(wù)器自己本身的信息,界面與客戶端數(shù)據(jù)庫部門信息接口一樣。
同時,服務(wù)器與客戶端也增加了對歷史任務(wù)信息的查詢。圖2所示為客戶端對應(yīng)查詢界面,給定開始與結(jié)束時間,就可查詢期間的所有任務(wù)信息,任務(wù)信息按時間順序排列。與客戶端相似,服務(wù)器端也提供歷史任務(wù)查詢,給定查詢條件進行查詢后,滿足條件的任務(wù)信息顯示在列表中,雙擊列表上的某個任務(wù),直接打開任務(wù)所在的文件夾,雙擊任務(wù)“煙臺-1”,該任務(wù)對應(yīng)的文件夾“C://duty/煙臺-1”打開,可看到具體的文件信息。
圖2 客戶端數(shù)據(jù)庫接口:查詢歷史任務(wù)
任務(wù)續(xù)傳能夠確保未完成任務(wù)在系統(tǒng)重新運行后,實現(xiàn)自動重連并繼續(xù)完成文件上傳。其邏輯流程是:在遠程服務(wù)器已經(jīng)啟動的前提下,服務(wù)器在啟動時同樣對數(shù)據(jù)庫進行查詢,以便將未完成任務(wù)加入任務(wù)管理隊列??蛻舳藛訒r,把所有未完成任務(wù)加入隊列,并根據(jù)任務(wù)信息向服務(wù)器發(fā)送重連請求(RegUnfiCMD),服務(wù)器接收到該請求后,激活任務(wù)隊列里的任務(wù)??蛻舳藛雍螅谏綁K代表未完成任務(wù)加入任務(wù)隊列,同樣服務(wù)器端也把未完成任務(wù)加入任務(wù)隊列??蛻舳耸紫劝l(fā)送重發(fā)命令以激活服務(wù)器端任務(wù),任務(wù)變成右斜線方塊,實質(zhì)上就是建立SSL通道,并使未完成任務(wù)處于可執(zhí)行狀態(tài)。新注冊的任務(wù)由左斜線方塊表示,新注冊的任務(wù)需要在雙方寫數(shù)據(jù)庫等操作,這與未完成任務(wù)不同操作。其流程如圖3所示。
客戶端任務(wù)續(xù)傳的相關(guān)代碼在HandleData函數(shù)中,其代碼如圖4所示。
如果客戶端與服務(wù)器通信過程中,發(fā)生網(wǎng)絡(luò)中斷??蛻舳艘坏┌l(fā)現(xiàn)與相關(guān)服務(wù)器的SSL通道無效時,就做網(wǎng)絡(luò)重連工作,工作流程如下:
圖3 任務(wù)續(xù)傳
(1)客戶端清空任務(wù)管理隊列(只有斷開服務(wù)器相關(guān)的任務(wù)),并重新讀數(shù)據(jù)庫,加載未完成任務(wù)。服務(wù)器將相關(guān)任務(wù)置為網(wǎng)絡(luò)斷開狀態(tài),等待客戶端發(fā)送的任務(wù)激活命令。
(2)客戶端將重新讀出的未完成任務(wù),加入隊列,重新向服務(wù)器發(fā)送未完成任務(wù)的激活命令,從而執(zhí)行續(xù)傳。
對于這個斷網(wǎng)后,又重新加入任務(wù)隊列激活的任務(wù),加入隊列的位置,有不同的選擇。目前的系統(tǒng)設(shè)計加入該類任務(wù)的方式是簡單的加入隊列后邊,因此影響任務(wù)調(diào)度順序。在將來的系統(tǒng)改進中,可以考慮增加更多可選的調(diào)度策略。當客戶端檢測到與服務(wù)器的SSL通道無效時,就使該連接對應(yīng)的任務(wù)清除出任務(wù)管理隊列,并使該連接失效。并開啟定時器檢查是否數(shù)據(jù)庫中對應(yīng)該服務(wù)器的未完成任務(wù),如果有實現(xiàn)自動重連到服務(wù)器。如果與斷開的服務(wù)器相關(guān)的任務(wù)都已完成,就不會發(fā)送重連請求。
圖4 任務(wù)續(xù)傳代碼
圖5 定時器處理函數(shù)
在實驗測試中,采用服務(wù)器退出再啟動(相當與使連接無效)來模擬網(wǎng)絡(luò)斷開,客戶端將清除對應(yīng)連接,并啟動定時器實現(xiàn)自動重連。定時器處理函數(shù)如圖5所示。
自動重連機制實現(xiàn)了無人工管理,只要通信雙方間的SSL通道失效,客戶端會定時查詢數(shù)據(jù)庫檢查是否有未完成任務(wù),若存在,立即向?qū)?yīng)服務(wù)器發(fā)送連接請求,直到服務(wù)器應(yīng)答,建立連接。若服務(wù)器此時不可達,客戶端會每隔一段時間實現(xiàn)重連,直到連接建立,繼續(xù)完成任務(wù)上傳。
任務(wù)續(xù)傳機制實現(xiàn)了客戶端啟動后首先進行數(shù)據(jù)庫查詢,查詢是否存在以前未完成任務(wù),如果存在則向任務(wù)對應(yīng)的服務(wù)器發(fā)送建立連接請求,并激活未完成任務(wù),最終完成任務(wù)的續(xù)傳。