APP下载

基于Web Service的大文件传输设计与实现

2014-04-29李文杰高鹏翔

计算机时代 2014年1期
关键词:多线程用户体验

李文杰 高鹏翔

摘 要: 分析了目前一些主流的文件传输方法,包括文件传输的相关协议以及Web Service技术等。在综合考虑用户对于跨防火墙通信和大数据量文件传输等方面需求的基础上,采用了基于Web Service技术的解决方案来实现文件传输系统。结合运用其他如多线程等多种技术,来有效解决一些大文件传输时经常遇到的如超时、用户体验等问题。

关键词: 大文件传输; Web Service; 跨防火墙通信; 超时; 多线程; 用户体验

中图分类号:TP315 文献标志码:A 文章编号:1006-8228(2014)01-27-02

0 引言

文件传输技术在企业中得到了广泛应用。但对于跨防火墙传输(如图1所示)和文件传输超时等问题,目前还缺少相关研究。为此,本文在分析各种文件传输技术的基础上,提出了一种基于Web Service技术实现文件传输的方法。

1 数据传输技术

自60年代末电子数据交换技术出现以来,已发展出多种数据传输方式,如:远程拷贝技术,各种文件传输协议,以及使用软件制造技術开发的数据传输系统等。下面对运用最广泛的文件传输的相关协议和数据传输系统的开发技术进行分析和比较。

1.1 文件传输协议

文件传输协议主要包括FTP、TFTP,FTPS[1-3]等。这些协议实现了文件的上传、下载和安全管理等功能,得到了广泛应用。但是,在安全性要求较高的环境中,防火墙可能会封锁上述协议所依赖的端口。如果服务器的有关端口被封闭,那么上述协议就难以找到可行的运用方案。因此文件传输协议不能满足跨防火墙传输的需要。

1.2 数据传输系统的发展

数据传输系统最初基于客户机/服务器模式实现,到90年代发展出以CORBA等为代表的分布式计算技术。CORBA等技术虽然在局域网内部的同源环境中表现良好,但仍存在平台耦合性高、缺少跨防火墙通信支持等问题,因而不适合跨网络异源环境中的数据传输。为此,必须发展更为统一和开放的技术标准。在这一背景下,Web Service技术逐渐得到推广[8]。

1.3 Web Service

Web Service基于XML,Http,SOAP,WSDL和UDDI[4-7]等标准。SOAP建立在XML与HTTP之上,能实现跨平台的数据传输;WSDL与UDDI则为分布式环境中发布和查找服务提供了支持。此外,Web Service基于XML与Http,因而能实现跨防火墙的文件传输(Http协议使用的80端口必须开放,否则不能满足基本联网需求)。基于上述优点,本系统选用Web Service技术进行开发。

2 文件传输系统的关键技术

根据用户要求,系统必须满足GB级别的大文件传输。针对大文件传输中常见的内存占用大和传输失败率高的问题,已经有分块传输和断点续传等解决方案[9];但对于超时问题目前仍缺少标准的解决方案。超时原因主要包括网络故障和服务器作业时间过长两方面。网络故障可通过网络恢复后重传解决;作业时间的问题则需要具体分析。作业时间可分为两阶段。

⑴ 准备阶段:进行文件的压缩与分割等。准备时间与数据量成正比,难以通过程序控制。

⑵ 传输阶段:传送分割得到的文件分块。分块大小可由程序指定,因此传输时间可控。

上传时,客户机是数据源。第⑴阶段已在客户端完成,客户机发出的请求均处于第⑵阶段,因此时间可控。非网络故障的情况下不会发生超时。

下载时,服务器是数据源。收到客户机发出的下载请求后,服务器处于第⑴阶段,时间难以控制,大数据量时极易发生超时。因此,本文重点解决下载作业的超时问题。

2.1 解决下载作业超时问题

解决超时问题通常的思路是增加等待时间[10],但这不能从根本上解决问题:首先,某些应用背景下能够设置的等待时间有限;其次,即使允许无限等待,等待中的客户机也不能获得服务器的作业进度,画面在下载开始后的较长时间里处于假死状态,用户可能会误以为系统崩溃。为此,本文结合多线程技术提出了新的解决方案。具体如下。

⑴ 解决画面假死问题。为此,需要在服务器处于准备阶段时就获得作业进度。首先在服务器端创建作业进度报告进程,用于获取下载作业的进度,当收到客户端请求时,该进程向客户端返回当前作业进度;此外,客户端也要指定负责向进度报告进程发出请求的线程。需要注意:该线程不能同时负责发起下载请求。因为客户机线程发起下载请求后必须等待服务器准备作业完成或超时才能执行下一步操作,所以等待期间无法向进度报告进程发出请求,从而无法及时获得作业进度,不能真正解决画面假死问题。因此,必须使用多线程技术:在客户端建立两个线程,分别负责发起下载请求和查询作业进度。

⑵ 解决超时问题。发起下载请求的线程可能会发生超时。超时发生时不能简单地中止下载,因为服务器可能仍在进行下载准备,并没有失败。所以本文采用如下方法:若发起下载请求的线程超时,客户机程序继续通过进度查询线程获得服务器的作业进度。若服务器最终成功完成准备作业,就进入文件分块传输阶段;若服务器准备作业最终失败,就真正中止下载作业,报告错误。详细流程如下。

① 下载准备阶段

客户机程序建立子线程用于发起下载请求;服务器收到请求后由下载进程启动准备工作,作业进度报告进程则记录准备作业的进度;子线程发起请求后,客户机主线程按一定时间间隔不断向服务器端进度报告进程发起轮询请求以获得最新的作业进度。因为发起下载请求的是子线程而非主线程,所以即使超时,也不会影响客户机主线程与服务器下载进程,从而解决了因超时导致下载作业无法进行的问题。因为无论超时发生与否主线程都能正常运行,所以能够不断把获得的下载作业进度反映到用户界面上,从而解决了画面假死问题(图2)。

② 文件传输阶段

服务器准备完毕后开始传输文件分块。由于服务器下载进程传送文件块时可以附带进度信息,并且客户机也可以根据下载的文件块数目计算进度,所以客户机主线程不再需要依赖进度报告进程获得进度信息,但仍需要把进度信息反映到用户界面以改善用户体验(图3)。

2.2 上传作业中应用进度反馈机制

前面已经论述过上传作业不用担心超时的问题,但用户体验可以活用下载作业的方法予以改善:根据已上传文件块的数目计算进度并实时反映到用户界面,改善用户体验。

3 结束语

实际运行中,本系统实现了跨网络的数据传输。即使客户机需要穿越防火墙连接另一网络中的服务器,也能成功完成传输。此外,系统在数量级为GB的文件传输中同样表现良好。特别是下载作业,服务器的准备时间通常在30分钟以上,客户机没有因为长时间等待而失败,并能够在服务器准备期间通过请求不断获得准备作业的进度;在开始文件分块的传输后,客户机能够继续取得传输进度,使用户得以不间断地监控整个传输过程,获得良好的用户体验。可见,本文提出的解决方案在跨网络、大数据量的文件传输作业中有着广阔的应用前景。

但是,目前的方法仍存在有待解决的问题:①作业时间过长。目前必须等待客户机(上传作业)或服务器(下载作业)准备好所有文件分块后才能开始传输。如果可以在生成第一个文件分块之后就开始传输,就能大幅度缩短时间。但要做到这一点,还需要兼顾数据完整性等问题,这需要进一步研究。②取消操作的实现。在传输文件分块的阶段,要取消传输作业,只要通知服务器结束传输,清除已传数据即可。但在下载作业的准备阶段中,服务器可能忙于执行读取、压缩等操作,即使收到用户的取消请求也不能立即停止。如何使服务器在准备过程中能及时响应取消请求,也需要继续研究和探讨。

参考文献:

[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服务开发[M].清华大学出版社,2004.

[9] 黎苑文,程明智,徐秀花,杨义先.断点续传及多线程机制在远程传版

中的应用研究[J].北京印刷学院学报,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.

猜你喜欢

多线程用户体验
Java并发工具包对并发编程的优化
基于用户交互式体验下的APP版式设计研究
手机阅读平台用户体验影响因子分析
O2O模式下生鲜农产品移动电子商务发展研究
浅谈用户体验在产品设计中的运用
基于多线程文件传输关键技术研究与实现
唯品会的品牌塑造研究
基于用户体验的电商平台界面管理影响因素研究
网页爬虫技术的关键技术研究探索
一种基于多线程的高速磁盘镜像算法