笔者设计的系统由客户端与服务器两部分组成,双方可以基于安全通道下进行通信,并能实现多对多的需求,即客户端可以向多个服务器上传数据,服务器同样可以接收多个可信的客户端,图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信息(客户端)相区分,任务的管理包括:任务队列,任务调度,任务查询等。任务管理模块是服务器良好运行的保证。
任务状态及预览模块是人机交互的接口。状态模块是服务器对当前系统运行状态的反馈,能够给操作人员决策提供参考。提供任务状体、客户端情况及当前系统运行状态,同时,为了能够检测数据是否丢失及受损,设计了预览模块,能够对上传任务的文件进行预览。
任务接收模块与文件解压模块是和客户端的发送和压缩模块彼此对应的,只是过程相反。
综上,服务器在以上模块的配合下,确保了系统的各个环节畅通运行。任何模块的瓶颈都会对系统造成性能的下降,甚至系统崩溃。