李文杰 高鵬翔
摘 要: 分析了目前一些主流的文件傳輸方法,包括文件傳輸?shù)南嚓P(guān)協(xié)議以及Web Service技術(shù)等。在綜合考慮用戶對(duì)于跨防火墻通信和大數(shù)據(jù)量文件傳輸?shù)确矫嫘枨蟮幕A(chǔ)上,采用了基于Web Service技術(shù)的解決方案來實(shí)現(xiàn)文件傳輸系統(tǒng)。結(jié)合運(yùn)用其他如多線程等多種技術(shù),來有效解決一些大文件傳輸時(shí)經(jīng)常遇到的如超時(shí)、用戶體驗(yàn)等問題。
關(guān)鍵詞: 大文件傳輸; Web Service; 跨防火墻通信; 超時(shí); 多線程; 用戶體驗(yàn)
中圖分類號(hào):TP315 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2014)01-27-02
0 引言
文件傳輸技術(shù)在企業(yè)中得到了廣泛應(yīng)用。但對(duì)于跨防火墻傳輸(如圖1所示)和文件傳輸超時(shí)等問題,目前還缺少相關(guān)研究。為此,本文在分析各種文件傳輸技術(shù)的基礎(chǔ)上,提出了一種基于Web Service技術(shù)實(shí)現(xiàn)文件傳輸?shù)姆椒ā?/p>
1 數(shù)據(jù)傳輸技術(shù)
自60年代末電子數(shù)據(jù)交換技術(shù)出現(xiàn)以來,已發(fā)展出多種數(shù)據(jù)傳輸方式,如:遠(yuǎn)程拷貝技術(shù),各種文件傳輸協(xié)議,以及使用軟件制造技術(shù)開發(fā)的數(shù)據(jù)傳輸系統(tǒng)等。下面對(duì)運(yùn)用最廣泛的文件傳輸?shù)南嚓P(guān)協(xié)議和數(shù)據(jù)傳輸系統(tǒng)的開發(fā)技術(shù)進(jìn)行分析和比較。
1.1 文件傳輸協(xié)議
文件傳輸協(xié)議主要包括FTP、TFTP,F(xiàn)TPS[1-3]等。這些協(xié)議實(shí)現(xiàn)了文件的上傳、下載和安全管理等功能,得到了廣泛應(yīng)用。但是,在安全性要求較高的環(huán)境中,防火墻可能會(huì)封鎖上述協(xié)議所依賴的端口。如果服務(wù)器的有關(guān)端口被封閉,那么上述協(xié)議就難以找到可行的運(yùn)用方案。因此文件傳輸協(xié)議不能滿足跨防火墻傳輸?shù)男枰?/p>
1.2 數(shù)據(jù)傳輸系統(tǒng)的發(fā)展
數(shù)據(jù)傳輸系統(tǒng)最初基于客戶機(jī)/服務(wù)器模式實(shí)現(xiàn),到90年代發(fā)展出以CORBA等為代表的分布式計(jì)算技術(shù)。CORBA等技術(shù)雖然在局域網(wǎng)內(nèi)部的同源環(huán)境中表現(xiàn)良好,但仍存在平臺(tái)耦合性高、缺少跨防火墻通信支持等問題,因而不適合跨網(wǎng)絡(luò)異源環(huán)境中的數(shù)據(jù)傳輸。為此,必須發(fā)展更為統(tǒng)一和開放的技術(shù)標(biāo)準(zhǔn)。在這一背景下,Web Service技術(shù)逐漸得到推廣[8]。
1.3 Web Service
Web Service基于XML,Http,SOAP,WSDL和UDDI[4-7]等標(biāo)準(zhǔn)。SOAP建立在XML與HTTP之上,能實(shí)現(xiàn)跨平臺(tái)的數(shù)據(jù)傳輸;WSDL與UDDI則為分布式環(huán)境中發(fā)布和查找服務(wù)提供了支持。此外,Web Service基于XML與Http,因而能實(shí)現(xiàn)跨防火墻的文件傳輸(Http協(xié)議使用的80端口必須開放,否則不能滿足基本聯(lián)網(wǎng)需求)?;谏鲜鰞?yōu)點(diǎn),本系統(tǒng)選用Web Service技術(shù)進(jìn)行開發(fā)。
2 文件傳輸系統(tǒng)的關(guān)鍵技術(shù)
根據(jù)用戶要求,系統(tǒng)必須滿足GB級(jí)別的大文件傳輸。針對(duì)大文件傳輸中常見的內(nèi)存占用大和傳輸失敗率高的問題,已經(jīng)有分塊傳輸和斷點(diǎn)續(xù)傳等解決方案[9];但對(duì)于超時(shí)問題目前仍缺少標(biāo)準(zhǔn)的解決方案。超時(shí)原因主要包括網(wǎng)絡(luò)故障和服務(wù)器作業(yè)時(shí)間過長兩方面。網(wǎng)絡(luò)故障可通過網(wǎng)絡(luò)恢復(fù)后重傳解決;作業(yè)時(shí)間的問題則需要具體分析。作業(yè)時(shí)間可分為兩階段。
⑴ 準(zhǔn)備階段:進(jìn)行文件的壓縮與分割等。準(zhǔn)備時(shí)間與數(shù)據(jù)量成正比,難以通過程序控制。
⑵ 傳輸階段:傳送分割得到的文件分塊。分塊大小可由程序指定,因此傳輸時(shí)間可控。
上傳時(shí),客戶機(jī)是數(shù)據(jù)源。第⑴階段已在客戶端完成,客戶機(jī)發(fā)出的請(qǐng)求均處于第⑵階段,因此時(shí)間可控。非網(wǎng)絡(luò)故障的情況下不會(huì)發(fā)生超時(shí)。
下載時(shí),服務(wù)器是數(shù)據(jù)源。收到客戶機(jī)發(fā)出的下載請(qǐng)求后,服務(wù)器處于第⑴階段,時(shí)間難以控制,大數(shù)據(jù)量時(shí)極易發(fā)生超時(shí)。因此,本文重點(diǎn)解決下載作業(yè)的超時(shí)問題。
2.1 解決下載作業(yè)超時(shí)問題
解決超時(shí)問題通常的思路是增加等待時(shí)間[10],但這不能從根本上解決問題:首先,某些應(yīng)用背景下能夠設(shè)置的等待時(shí)間有限;其次,即使允許無限等待,等待中的客戶機(jī)也不能獲得服務(wù)器的作業(yè)進(jìn)度,畫面在下載開始后的較長時(shí)間里處于假死狀態(tài),用戶可能會(huì)誤以為系統(tǒng)崩潰。為此,本文結(jié)合多線程技術(shù)提出了新的解決方案。具體如下。
⑴ 解決畫面假死問題。為此,需要在服務(wù)器處于準(zhǔn)備階段時(shí)就獲得作業(yè)進(jìn)度。首先在服務(wù)器端創(chuàng)建作業(yè)進(jìn)度報(bào)告進(jìn)程,用于獲取下載作業(yè)的進(jìn)度,當(dāng)收到客戶端請(qǐng)求時(shí),該進(jìn)程向客戶端返回當(dāng)前作業(yè)進(jìn)度;此外,客戶端也要指定負(fù)責(zé)向進(jìn)度報(bào)告進(jìn)程發(fā)出請(qǐng)求的線程。需要注意:該線程不能同時(shí)負(fù)責(zé)發(fā)起下載請(qǐng)求。因?yàn)榭蛻魴C(jī)線程發(fā)起下載請(qǐng)求后必須等待服務(wù)器準(zhǔn)備作業(yè)完成或超時(shí)才能執(zhí)行下一步操作,所以等待期間無法向進(jìn)度報(bào)告進(jìn)程發(fā)出請(qǐng)求,從而無法及時(shí)獲得作業(yè)進(jìn)度,不能真正解決畫面假死問題。因此,必須使用多線程技術(shù):在客戶端建立兩個(gè)線程,分別負(fù)責(zé)發(fā)起下載請(qǐng)求和查詢作業(yè)進(jìn)度。
⑵ 解決超時(shí)問題。發(fā)起下載請(qǐng)求的線程可能會(huì)發(fā)生超時(shí)。超時(shí)發(fā)生時(shí)不能簡單地中止下載,因?yàn)榉?wù)器可能仍在進(jìn)行下載準(zhǔn)備,并沒有失敗。所以本文采用如下方法:若發(fā)起下載請(qǐng)求的線程超時(shí),客戶機(jī)程序繼續(xù)通過進(jìn)度查詢線程獲得服務(wù)器的作業(yè)進(jìn)度。若服務(wù)器最終成功完成準(zhǔn)備作業(yè),就進(jìn)入文件分塊傳輸階段;若服務(wù)器準(zhǔn)備作業(yè)最終失敗,就真正中止下載作業(yè),報(bào)告錯(cuò)誤。詳細(xì)流程如下。
① 下載準(zhǔn)備階段
客戶機(jī)程序建立子線程用于發(fā)起下載請(qǐng)求;服務(wù)器收到請(qǐng)求后由下載進(jìn)程啟動(dòng)準(zhǔn)備工作,作業(yè)進(jìn)度報(bào)告進(jìn)程則記錄準(zhǔn)備作業(yè)的進(jìn)度;子線程發(fā)起請(qǐng)求后,客戶機(jī)主線程按一定時(shí)間間隔不斷向服務(wù)器端進(jìn)度報(bào)告進(jìn)程發(fā)起輪詢請(qǐng)求以獲得最新的作業(yè)進(jìn)度。因?yàn)榘l(fā)起下載請(qǐng)求的是子線程而非主線程,所以即使超時(shí),也不會(huì)影響客戶機(jī)主線程與服務(wù)器下載進(jìn)程,從而解決了因超時(shí)導(dǎo)致下載作業(yè)無法進(jìn)行的問題。因?yàn)闊o論超時(shí)發(fā)生與否主線程都能正常運(yùn)行,所以能夠不斷把獲得的下載作業(yè)進(jìn)度反映到用戶界面上,從而解決了畫面假死問題(圖2)。
② 文件傳輸階段
服務(wù)器準(zhǔn)備完畢后開始傳輸文件分塊。由于服務(wù)器下載進(jìn)程傳送文件塊時(shí)可以附帶進(jìn)度信息,并且客戶機(jī)也可以根據(jù)下載的文件塊數(shù)目計(jì)算進(jìn)度,所以客戶機(jī)主線程不再需要依賴進(jìn)度報(bào)告進(jìn)程獲得進(jìn)度信息,但仍需要把進(jìn)度信息反映到用戶界面以改善用戶體驗(yàn)(圖3)。
2.2 上傳作業(yè)中應(yīng)用進(jìn)度反饋機(jī)制
前面已經(jīng)論述過上傳作業(yè)不用擔(dān)心超時(shí)的問題,但用戶體驗(yàn)可以活用下載作業(yè)的方法予以改善:根據(jù)已上傳文件塊的數(shù)目計(jì)算進(jìn)度并實(shí)時(shí)反映到用戶界面,改善用戶體驗(yàn)。
3 結(jié)束語
實(shí)際運(yùn)行中,本系統(tǒng)實(shí)現(xiàn)了跨網(wǎng)絡(luò)的數(shù)據(jù)傳輸。即使客戶機(jī)需要穿越防火墻連接另一網(wǎng)絡(luò)中的服務(wù)器,也能成功完成傳輸。此外,系統(tǒng)在數(shù)量級(jí)為GB的文件傳輸中同樣表現(xiàn)良好。特別是下載作業(yè),服務(wù)器的準(zhǔn)備時(shí)間通常在30分鐘以上,客戶機(jī)沒有因?yàn)殚L時(shí)間等待而失敗,并能夠在服務(wù)器準(zhǔn)備期間通過請(qǐng)求不斷獲得準(zhǔn)備作業(yè)的進(jìn)度;在開始文件分塊的傳輸后,客戶機(jī)能夠繼續(xù)取得傳輸進(jìn)度,使用戶得以不間斷地監(jiān)控整個(gè)傳輸過程,獲得良好的用戶體驗(yàn)??梢?,本文提出的解決方案在跨網(wǎng)絡(luò)、大數(shù)據(jù)量的文件傳輸作業(yè)中有著廣闊的應(yīng)用前景。
但是,目前的方法仍存在有待解決的問題:①作業(yè)時(shí)間過長。目前必須等待客戶機(jī)(上傳作業(yè))或服務(wù)器(下載作業(yè))準(zhǔn)備好所有文件分塊后才能開始傳輸。如果可以在生成第一個(gè)文件分塊之后就開始傳輸,就能大幅度縮短時(shí)間。但要做到這一點(diǎn),還需要兼顧數(shù)據(jù)完整性等問題,這需要進(jìn)一步研究。②取消操作的實(shí)現(xiàn)。在傳輸文件分塊的階段,要取消傳輸作業(yè),只要通知服務(wù)器結(jié)束傳輸,清除已傳數(shù)據(jù)即可。但在下載作業(yè)的準(zhǔn)備階段中,服務(wù)器可能忙于執(zhí)行讀取、壓縮等操作,即使收到用戶的取消請(qǐng)求也不能立即停止。如何使服務(wù)器在準(zhǔn)備過程中能及時(shí)響應(yīng)取消請(qǐng)求,也需要繼續(xù)研究和探討。
參考文獻(xiàn):
[1] J. Postel, J. Reynolds. FILE TRANSFER PROTOCOL (FTP)[S].
RFC 959, October 1985. http://tools.ietf.org/html/rfc959.
[2] G. Malkin, A. Harkin. TFTP Option Extension[S]. RFC 2347, May
1998. http://tools.ietf.org/html/rfc2347.
[3] T. Dierks, E. Rescorla. The Transport Layer Security (TLS)
Protocol[S]. RFC 5246, August 2008.http://tools.ietf.org/html/rfc5246.
[4] Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler,
Fran?ois Yergeau. Extensible Markup Language (XML) 1.0 (Fifth Edition)[S]. W3C Recommendation,26 November 2008. http://www.w3.org/TR/REC-xml/.
[5] Martin Gudgin, Marc Hadley, Noah Mendelsohn, Jean-Jacques
Moreau, Henrik Frystyk Nielsen, Anish Karmarkar, Yves Lafon. SOAP Version 1.2[S]. W3C Recommendation, 27 April 2007. http://www.w3.org/TR/soap12-part1/.
[6] Erik Christensen, Francisco Curbera, Greg Meredith, Sanjiva
Weerawarana. Web Services Description Language (WSDL) 1.1[S]. W3C Note, 15 March 2001. http://www.w3.org/TR/wsdl.
[7] Peter Brittenham, Francisco Cubera, Dave Ehnebuske, Steve
Graham. Understanding WSDL in a UDDI registry, Part 1[OL]. IBM developerWorks, 01 Sep 2001. http://www.ibm.com/developerworks/library/ws-wsdl/.
[8] Ramesh Nagappan,Robert Skoczylas,Rima Patel Sriganesh 著,龐
大剛,陶程譯.Java Web服務(wù)開發(fā)[M].清華大學(xué)出版社,2004.
[9] 黎苑文,程明智,徐秀花,楊義先.斷點(diǎn)續(xù)傳及多線程機(jī)制在遠(yuǎn)程傳版
中的應(yīng)用研究[J].北京印刷學(xué)院學(xué)報(bào),2012.20(6):53-56
[10] Apache Software Foundation. Timeout Configuration[EB/OL].
April 2012.http://axis.apache.org/axis2/java/core/docs/http-
transport.html.