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