文件批量傳輸組件主要技術是使用Socket編程和線程池進行文件傳輸和消息傳遞。編程
圖1 兩臺主機單向傳送文件的工做圖緩存
兩臺主機之間單向傳輸的流程是文件接收主機(C主機)進行端口監聽,發送文件主機(A主機)定時掃描監控要傳輸的文件夾,當有新文件時,則向C主機的監聽端口進行Socket鏈接,進行文件傳輸, 完成後加入緩存,下次掃描不會對此文件進行傳輸。服務器
其詳細的流程以下圖:多線程
一、發送文件主機會每隔必定時間進行文件夾掃描任務,掃描時先判斷是否正在進行傳輸中,若是正在傳輸,則結束,沒有則進行掃描文件夾。併發
二、每掃描到一個文件時,會在緩存中進行查詢,查看緩存中有沒有存在該文件信息,若是存在,則查看傳輸有沒有成功,若是傳輸成功,則不入隊列。不然要進行入隊列傳輸,並在緩存中進行相應更新。異步
三、隊列傳輸採用線程池併發進行,使用Socket向接收文件主機的監聽端口進行鏈接,先發送文件名,文件長度,文件md5等信息,文件接收服務器會把文件以原來同樣的相對路徑進行存儲,並計算存儲了的文件的md5,進行比較,若是md5相同,則表示傳輸成功,在本次Socket鏈接中返回成功標記。若是md5不相同,則是傳輸失敗,返回失敗標記。斷開這次Socket鏈接。spa
四、文件傳送返回成功與否的標記,進行回調。傳輸成功了在緩存中更新該文件的狀態。若是失敗,則進行從新傳輸,最多重傳3次。線程
五、發送文件主機的整個從掃描到所有文件傳輸完成,都是要進行時間記錄,因爲採用異步和多線程,主線程程序運行結束,而子線程還在運行,所以對其線程回調時要進行狀態計數,才能知道何時所有文件傳輸完了。隊列
圖2 發送文件的主要流程事件
圖3 中轉傳輸工做圖
對於外網主機傳輸文件到內網主機,就要有一臺中轉服務器把文件進行中轉,其流程是文件發送主機(A主機)定時進行文件夾監控,將新文件經過中轉服務器(B主機)的端口鏈接發送文件,中轉服務器成功接收後,將其保存於文件夾,並觸發事件將此文件向目標主機(C主機)發送文件,C主機接收文件後,中轉服務器回調要向文件發送主機(A主機)的消息接收端口進行鏈接,發送C主機傳送狀況。A主機再將對於的文件的傳送狀態進行更新。