筆者設(shè)計的系統(tǒng)由客戶端與服務(wù)器兩部分組成,雙方可以基于安全通道下進行通信,并能實現(xiàn)多對多的需求,即客戶端可以向多個服務(wù)器上傳數(shù)據(jù),服務(wù)器同樣可以接收多個可信的客戶端,圖1描述了系統(tǒng)的結(jié)構(gòu)框圖。
承擔(dān)安全傳輸通道的是SSL機制,通過該策略,確保了只有可信的雙方才能建立起連接并進行通信。進行連接通信的雙方(一個服務(wù)器、一個客戶端)只保持一個安全通道,在一次上傳印前數(shù)字樣張任務(wù)結(jié)束后并不斷開連接。當然,上傳的文件可以是圖像、文本以及其他各種類型的文件等,且一次上傳也可以是多個文件。
圖1 系統(tǒng)結(jié)構(gòu)框圖
該網(wǎng)絡(luò)傳輸系統(tǒng)的客戶端擁有一個任務(wù)隊列,任務(wù)隊列可以采用先來現(xiàn)服務(wù)的策略,也可以采用優(yōu)先級策略。通信的雙方基于SSL通道,按照一定的任務(wù)管理機制,進行任務(wù)上傳??蛻舳嗽谶M行文件傳輸前,進行文件壓縮(也可以不壓縮)。服務(wù)器端先將上傳文件保存為臨時文件,當一個完整的文件到達后,才把臨時文件轉(zhuǎn)為原始文件。服務(wù)器端的任務(wù)隊列是所有需要上傳任務(wù)的集合,隊列中每一個任務(wù)都有一個標識,以反映該任務(wù)是否已經(jīng)上傳或正在上傳。圖2所示為整個系統(tǒng)的流程圖。
圖2 系統(tǒng)流程圖
客戶端主要負責(zé)連接遠程服務(wù)器,與服務(wù)器建立安全網(wǎng)絡(luò)通道,主要包括:連接、數(shù)據(jù)庫、任務(wù)管理、狀態(tài)信息、錯誤處理、壓縮等模塊。
客戶端根據(jù)服務(wù)器IP地址和端口,實現(xiàn)TCP連接。雙方根據(jù)持有證書進行驗證,三次握手后實現(xiàn)連接。
在客戶端與服務(wù)器建立上述連接后,雙方一直保持這個連接,客戶端的任務(wù)都通過此通道上傳。數(shù)據(jù)庫模塊將保存所有上傳的任務(wù)信息和相關(guān)聯(lián)的服務(wù)器信息,任務(wù)信息描述了任務(wù)登記的時間、需要上傳的服務(wù)器等。服務(wù)器信息用來記載服務(wù)器IP和端口和其他相關(guān)信息。同時,任務(wù)上傳狀態(tài)也會被記載,如:任務(wù)數(shù)量、任務(wù)上傳時間、任務(wù)上傳進度等。
任務(wù)信息任務(wù)管理模塊主要用于管理任務(wù),借助數(shù)據(jù)結(jié)構(gòu)管理任務(wù),其包括關(guān)聯(lián)的SSL信息、任務(wù)信息中具體文件信息、任務(wù)排隊情況、任務(wù)上傳情況。
圖3 文件壓縮與上傳模塊
SSL信息代表SSL通道信息,是與任務(wù)關(guān)聯(lián)的重要信息,任務(wù)的上傳就是以SSL信息加任務(wù)信息來標識的。任務(wù)排隊是整個系統(tǒng)運行的基礎(chǔ),維系著任務(wù)調(diào)度,可優(yōu)化系統(tǒng)運行。
任務(wù)的上傳狀態(tài)包含了每個任務(wù)的注冊時間、任務(wù)開始上傳時間、任務(wù)結(jié)束時間、任務(wù)包含文件數(shù)量及類型等信息。
文件壓縮模塊如圖3所示,采用邊壓縮邊傳輸?shù)牟呗?,主要負?zé)上傳任務(wù)中圖象文件的壓縮,調(diào)用RAR壓縮算法,對圖象文件做無損壓縮。
(4)良好的企業(yè)文化是一種無形的管理方式,它可以使人們樹立一種以企業(yè)為中心的共同價值觀念,帶動員工樹立明確目標,增強員工的凝聚力。
RAR的一個主要優(yōu)點是可以把文件壓縮目標分割到多個文件,并且很容易從這樣的分割的壓縮文件解壓出源文件。
另外,RAR也支持緊縮格式,把所有文件壓縮到同一個數(shù)據(jù)區(qū)以加大壓縮比,代價是解壓一個單獨的文件時必須解壓其前面的所有文件。圖3下部分為任務(wù)傳輸模塊(數(shù)據(jù)上傳),以SSL通道為依托,將任務(wù)信息中的文件分塊發(fā)送到服務(wù)器。
狀態(tài)信息模塊可以及時反饋用戶任務(wù)狀態(tài)信息,該模塊是基于對系統(tǒng)中任務(wù)調(diào)用、傳輸?shù)鹊韧獠糠从?,可為用戶提供掌握系統(tǒng)運行情況,以便為后續(xù)任務(wù)加入提供依據(jù)。任務(wù)的狀態(tài)模塊可提供:任務(wù)數(shù)量、每個任務(wù)包含文件情況(類型、數(shù)量)、任務(wù)調(diào)用情況、任務(wù)完成情況、時間信息以及任務(wù)排隊情況等信息,有助于及時對系統(tǒng)進行全面了解。
錯誤處理模塊包含任務(wù)續(xù)傳、SSL通道自動重連、現(xiàn)場還原等處理機制。自動重連策略是在網(wǎng)絡(luò)中斷或服務(wù)器不可到達而造成SSL通道中斷時,客戶端根據(jù)任務(wù)隊列,向遠程服務(wù)器自動發(fā)送連接請求,請求建立新的SSL通道,以便任務(wù)繼續(xù)完成;如果網(wǎng)絡(luò)問題,或?qū)Ψ椒?wù)器繼續(xù)不可到達,則及時反饋給用戶,以便用戶采取進一步措施來解決問題,是計算機系統(tǒng)智能化發(fā)展的必然趨勢。
在系統(tǒng)出現(xiàn)如計算機重啟、計算機死機等問題后,客戶端需要重新啟動,此時,現(xiàn)場還原功能可以利用數(shù)據(jù)庫記載的任務(wù)信息、遠程服務(wù)器信息及任務(wù)狀體信息,便系統(tǒng)恢復(fù)到錯誤發(fā)生前的狀態(tài)。任務(wù)續(xù)傳是指客戶端重啟后,重啟前還沒有全部上傳的任務(wù)將會繼續(xù)續(xù)傳。
整個客戶端系統(tǒng)的工作流程如圖4所示,客戶端負責(zé)用戶上傳任務(wù)登記,寫入數(shù)據(jù)庫,選擇服務(wù)器進行上傳,將上傳任務(wù)加入上傳隊列,等待服務(wù)器啟動上傳請求。
當新任務(wù)到來時,客戶端首先根據(jù)任務(wù)需要上傳的服務(wù)器地址判斷是否雙方是否已經(jīng)有SSL通道,如果沒有,建立SSL模塊就會為雙方建立安全鏈接。
如果已經(jīng)存在通道,則直接把任務(wù)交由任務(wù)管理模塊,將任務(wù)加入上傳隊列,同時寫入數(shù)據(jù)庫,對所有上傳任務(wù)進行管理。此時,任務(wù)并沒有開始發(fā)送,因為,服務(wù)器此時可能比較繁忙,網(wǎng)絡(luò)帶寬有限,因此,真正的上傳取決與服務(wù)器端的請求。
只有當遠程服務(wù)器發(fā)送上傳請求,且客戶端沒有處理發(fā)往其他服務(wù)器的任務(wù)時,隊列中服務(wù)器請求的任務(wù)開始上傳,在上傳過程中,對上傳的文件做無損壓縮處理,以提高網(wǎng)絡(luò)帶寬利用率,邊壓縮邊傳輸;而在服務(wù)器端,只有等到完整的壓縮全部接收文件后,才解壓文件。除此之外,客戶端還支持對傳輸文件的預(yù)覽、上傳狀態(tài)顯示等信息。
圖4 客戶端工作流程
圖5 服務(wù)器組成模塊
服務(wù)器負責(zé)多客戶端連接請求,實現(xiàn)雙方安全通道的建立,接收上傳數(shù)據(jù),并實時對上傳文件進行解壓。
圖5描述了服務(wù)器的組成模塊:啟動模塊、客戶端連接請求模塊、數(shù)據(jù)庫管理模塊、客戶端管理模塊、任務(wù)管理模塊、任務(wù)狀態(tài)及預(yù)覽模塊、任務(wù)接收模塊、文件解壓模塊。數(shù)據(jù)庫管理模塊設(shè)計與客戶端相同。
服務(wù)器啟動后,監(jiān)聽客戶端請求。如果有客戶端請求,就與之建立SSL安全通道,并把客戶端信息寫入數(shù)據(jù)庫,由客戶端管理模塊進行管理;對客戶端的任務(wù),寫入數(shù)據(jù)庫,并依靠任務(wù)管理模塊對其操作;這個服務(wù)器系統(tǒng)維持一個任務(wù)隊列,實時檢測是否有待上傳的任務(wù)。
如果存在,任務(wù)接收模塊發(fā)啟對客戶端上傳請求,當指定的客戶端不繁忙時,客戶端就會將壓縮過的文件數(shù)據(jù)包發(fā)送到服務(wù)器,當任務(wù)接收模塊判斷是一個完整的文件壓縮包后,調(diào)用解壓模塊,還原文件。
如果客戶端繁忙,服務(wù)器就會選擇任務(wù)隊列下一個任務(wù)對其他客戶端發(fā)上傳請求。
服務(wù)器的任務(wù)管理模塊判斷任務(wù)隊列,只要不為空,就繼續(xù)發(fā)上傳請求。具體模塊描述如下:
圖6 服務(wù)器啟動及服務(wù)器處理客戶連接
圖6a所示的服務(wù)啟動模塊是服務(wù)器系統(tǒng)打開計算端口,并監(jiān)聽客戶端請求。啟動模塊實現(xiàn)網(wǎng)絡(luò)連接的初始化。
圖6b所示的客戶端連接請求模塊是服務(wù)器與客戶端能否建立連接的關(guān)鍵。當服務(wù)器在端口上監(jiān)聽到有連接請求,客戶端必須先與服務(wù)器之間驗證證書,只有滿足要求的客戶端才可以成功連接服務(wù)器。
當滿足驗證要求后,服務(wù)器啟動處理客戶端事件進行處理,即開啟一個線程處理客戶端請求,后續(xù)所有該客戶端與服務(wù)器的通信,都由這個事件(進程)處理。
因此,每個客戶端與服務(wù)器間都有唯一一個對應(yīng)事件(進程)負責(zé)處理通信。
客戶端管理模塊與任務(wù)管理模塊是整個服務(wù)器系統(tǒng)的核心部分。客戶端管理與任務(wù)管理相關(guān)聯(lián),每個客戶端只能與服務(wù)器建立一條通道,每個客戶端可能對應(yīng)多個任務(wù),這些任務(wù)以任務(wù)名、注冊時間、及關(guān)聯(lián)的SSL信息(客戶端)相區(qū)分,任務(wù)的管理包括:任務(wù)隊列,任務(wù)調(diào)度,任務(wù)查詢等。任務(wù)管理模塊是服務(wù)器良好運行的保證。
任務(wù)狀態(tài)及預(yù)覽模塊是人機交互的接口。狀態(tài)模塊是服務(wù)器對當前系統(tǒng)運行狀態(tài)的反饋,能夠給操作人員決策提供參考。提供任務(wù)狀體、客戶端情況及當前系統(tǒng)運行狀態(tài),同時,為了能夠檢測數(shù)據(jù)是否丟失及受損,設(shè)計了預(yù)覽模塊,能夠?qū)ι蟼魅蝿?wù)的文件進行預(yù)覽。
任務(wù)接收模塊與文件解壓模塊是和客戶端的發(fā)送和壓縮模塊彼此對應(yīng)的,只是過程相反。
綜上,服務(wù)器在以上模塊的配合下,確保了系統(tǒng)的各個環(huán)節(jié)暢通運行。任何模塊的瓶頸都會對系統(tǒng)造成性能的下降,甚至系統(tǒng)崩潰。