筆者設計的系統由客戶端與服務器兩部分組成,雙方可以基于安全通道下進行通信,并能實現多對多的需求,即客戶端可以向多個服務器上傳數據,服務器同樣可以接收多個可信的客戶端,圖1描述了系統的結構框圖。
承擔安全傳輸通道的是SSL機制,通過該策略,確保了只有可信的雙方才能建立起連接并進行通信。進行連接通信的雙方(一個服務器、一個客戶端)只保持一個安全通道,在一次上傳印前數字樣張任務結束后并不斷開連接。當然,上傳的文件可以是圖像、文本以及其他各種類型的文件等,且一次上傳也可以是多個文件。

圖1 系統結構框圖
該網絡傳輸系統的客戶端擁有一個任務隊列,任務隊列可以采用先來現服務的策略,也可以采用優先級策略。通信的雙方基于SSL通道,按照一定的任務管理機制,進行任務上傳。客戶端在進行文件傳輸前,進行文件壓縮(也可以不壓縮)。服務器端先將上傳文件保存為臨時文件,當一個完整的文件到達后,才把臨時文件轉為原始文件。服務器端的任務隊列是所有需要上傳任務的集合,隊列中每一個任務都有一個標識,以反映該任務是否已經上傳或正在上傳。圖2所示為整個系統的流程圖。

圖2 系統流程圖
客戶端主要負責連接遠程服務器,與服務器建立安全網絡通道,主要包括:連接、數據庫、任務管理、狀態信息、錯誤處理、壓縮等模塊。
客戶端根據服務器IP地址和端口,實現TCP連接。雙方根據持有證書進行驗證,三次握手后實現連接。
在客戶端與服務器建立上述連接后,雙方一直保持這個連接,客戶端的任務都通過此通道上傳。數據庫模塊將保存所有上傳的任務信息和相關聯的服務器信息,任務信息描述了任務登記的時間、需要上傳的服務器等。服務器信息用來記載服務器IP和端口和其他相關信息。同時,任務上傳狀態也會被記載,如:任務數量、任務上傳時間、任務上傳進度等。
任務信息任務管理模塊主要用于管理任務,借助數據結構管理任務,其包括關聯的SSL信息、任務信息中具體文件信息、任務排隊情況、任務上傳情況。

圖3 文件壓縮與上傳模塊
SSL信息代表SSL通道信息,是與任務關聯的重要信息,任務的上傳就是以SSL信息加任務信息來標識的。任務排隊是整個系統運行的基礎,維系著任務調度,可優化系統運行。
任務的上傳狀態包含了每個任務的注冊時間、任務開始上傳時間、任務結束時間、任務包含文件數量及類型等信息。
文件壓縮模塊如圖3所示,采用邊壓縮邊傳輸的策略,主要負責上傳任務中圖象文件的壓縮,調用RAR壓縮算法,對圖象文件做無損壓縮。
(4)良好的企業文化是一種無形的管理方式,它可以使人們樹立一種以企業為中心的共同價值觀念,帶動員工樹立明確目標,增強員工的凝聚力。
RAR的一個主要優點是可以把文件壓縮目標分割到多個文件,并且很容易從這樣的分割的壓縮文件解壓出源文件。
另外,RAR也支持緊縮格式,把所有文件壓縮到同一個數據區以加大壓縮比,代價是解壓一個單獨的文件時必須解壓其前面的所有文件。圖3下部分為任務傳輸模塊(數據上傳),以SSL通道為依托,將任務信息中的文件分塊發送到服務器。
狀態信息模塊可以及時反饋用戶任務狀態信息,該模塊是基于對系統中任務調用、傳輸等等外部反映,可為用戶提供掌握系統運行情況,以便為后續任務加入提供依據。任務的狀態模塊可提供:任務數量、每個任務包含文件情況(類型、數量)、任務調用情況、任務完成情況、時間信息以及任務排隊情況等信息,有助于及時對系統進行全面了解。
錯誤處理模塊包含任務續傳、SSL通道自動重連、現場還原等處理機制。自動重連策略是在網絡中斷或服務器不可到達而造成SSL通道中斷時,客戶端根據任務隊列,向遠程服務器自動發送連接請求,請求建立新的SSL通道,以便任務繼續完成;如果網絡問題,或對方服務器繼續不可到達,則及時反饋給用戶,以便用戶采取進一步措施來解決問題,是計算機系統智能化發展的必然趨勢。
在系統出現如計算機重啟、計算機死機等問題后,客戶端需要重新啟動,此時,現場還原功能可以利用數據庫記載的任務信息、遠程服務器信息及任務狀體信息,便系統恢復到錯誤發生前的狀態。任務續傳是指客戶端重啟后,重啟前還沒有全部上傳的任務將會繼續續傳。
整個客戶端系統的工作流程如圖4所示,客戶端負責用戶上傳任務登記,寫入數據庫,選擇服務器進行上傳,將上傳任務加入上傳隊列,等待服務器啟動上傳請求。
當新任務到來時,客戶端首先根據任務需要上傳的服務器地址判斷是否雙方是否已經有SSL通道,如果沒有,建立SSL模塊就會為雙方建立安全鏈接。
如果已經存在通道,則直接把任務交由任務管理模塊,將任務加入上傳隊列,同時寫入數據庫,對所有上傳任務進行管理。此時,任務并沒有開始發送,因為,服務器此時可能比較繁忙,網絡帶寬有限,因此,真正的上傳取決與服務器端的請求。
只有當遠程服務器發送上傳請求,且客戶端沒有處理發往其他服務器的任務時,隊列中服務器請求的任務開始上傳,在上傳過程中,對上傳的文件做無損壓縮處理,以提高網絡帶寬利用率,邊壓縮邊傳輸;而在服務器端,只有等到完整的壓縮全部接收文件后,才解壓文件。除此之外,客戶端還支持對傳輸文件的預覽、上傳狀態顯示等信息。

圖4 客戶端工作流程

圖5 服務器組成模塊
服務器負責多客戶端連接請求,實現雙方安全通道的建立,接收上傳數據,并實時對上傳文件進行解壓。
圖5描述了服務器的組成模塊:啟動模塊、客戶端連接請求模塊、數據庫管理模塊、客戶端管理模塊、任務管理模塊、任務狀態及預覽模塊、任務接收模塊、文件解壓模塊。數據庫管理模塊設計與客戶端相同。
服務器啟動后,監聽客戶端請求。如果有客戶端請求,就與之建立SSL安全通道,并把客戶端信息寫入數據庫,由客戶端管理模塊進行管理;對客戶端的任務,寫入數據庫,并依靠任務管理模塊對其操作;這個服務器系統維持一個任務隊列,實時檢測是否有待上傳的任務。
如果存在,任務接收模塊發啟對客戶端上傳請求,當指定的客戶端不繁忙時,客戶端就會將壓縮過的文件數據包發送到服務器,當任務接收模塊判斷是一個完整的文件壓縮包后,調用解壓模塊,還原文件。
如果客戶端繁忙,服務器就會選擇任務隊列下一個任務對其他客戶端發上傳請求。
服務器的任務管理模塊判斷任務隊列,只要不為空,就繼續發上傳請求。具體模塊描述如下:

圖6 服務器啟動及服務器處理客戶連接
圖6a所示的服務啟動模塊是服務器系統打開計算端口,并監聽客戶端請求。啟動模塊實現網絡連接的初始化。
圖6b所示的客戶端連接請求模塊是服務器與客戶端能否建立連接的關鍵。當服務器在端口上監聽到有連接請求,客戶端必須先與服務器之間驗證證書,只有滿足要求的客戶端才可以成功連接服務器。
當滿足驗證要求后,服務器啟動處理客戶端事件進行處理,即開啟一個線程處理客戶端請求,后續所有該客戶端與服務器的通信,都由這個事件(進程)處理。
因此,每個客戶端與服務器間都有唯一一個對應事件(進程)負責處理通信。
客戶端管理模塊與任務管理模塊是整個服務器系統的核心部分。客戶端管理與任務管理相關聯,每個客戶端只能與服務器建立一條通道,每個客戶端可能對應多個任務,這些任務以任務名、注冊時間、及關聯的SSL信息(客戶端)相區分,任務的管理包括:任務隊列,任務調度,任務查詢等。任務管理模塊是服務器良好運行的保證。
任務狀態及預覽模塊是人機交互的接口。狀態模塊是服務器對當前系統運行狀態的反饋,能夠給操作人員決策提供參考。提供任務狀體、客戶端情況及當前系統運行狀態,同時,為了能夠檢測數據是否丟失及受損,設計了預覽模塊,能夠對上傳任務的文件進行預覽。
任務接收模塊與文件解壓模塊是和客戶端的發送和壓縮模塊彼此對應的,只是過程相反。
綜上,服務器在以上模塊的配合下,確保了系統的各個環節暢通運行。任何模塊的瓶頸都會對系統造成性能的下降,甚至系統崩潰。