实现任务续传与自动重连
2019-04-03湖北吴征云呼晓婷舒忠
■ 湖北 吴征云 呼晓婷 舒忠
编者按:本文将介绍如何在建立数字样张远程传输系统仿真平台的前提下,完成对任务续传与自动重连功能的实现。
在 以SSL VPN安全策略构建的互联网通信平台的基础上,依据对印刷数字样张远程传输系统客户端和服务器端功能的规划设计,在完成系统实现后,为了提高系统的自动检测与控制程度,需要为系统设计了任务续传与自动重连功能模块。
表1 仿真环境
图1 服务器端任务保存
仿真系统的构建
对系统的仿真环境见表1所示。客户端上传给服务的文件,以任务为单位建立文件夹,文件夹名称为任务ID,保存在:C://Duty(该路径可以在系统配置中更改)目录下。例如:任务的ID为“荆门-1”,在服务器的C://Duty下就会生成以“荆门-1”名称的文件夹,对应的上传的文件都会保存在此处,如图1所示。
1.客户端由三个属性构成:任务、上传、状态组成,属性直接相互关联。
(1)任务属性主要完成任务的初始化,明确任务来源、负责人以及任务的相关内容;提供数据库接口,方便配置及查询。
(2)上传属性提供可选的服务器地址列表,支持多种文件选择方式(单选、多选、跨路径选择),支持对已选文件的删除,并能对图像文件或avi文件进行预览,以及选择文件后的上传。
(3)状体属性及时反馈任务状态信息,以及任务排队信息,并能查询任务对应的文件。
2.服务器端提供文件、配置和说明三个菜单选项,主界面是任务状态显示栏,客户端发送的任务都会显示在这个状态栏中,反馈任务状态信息。
(1)文件菜单提供系统启动、关闭、退出功能。
(2)配置菜单提供数据配置、网络配置。
(3)说明菜单简单介绍系统。关任务状态信息栏支持查询每个任务对应的文件信息。
3.仿真实验主要侧重于网络中断后自动重连。
4.为了方便与数据库通信,提供了API接口。系统与数据库相关部分主要包括:部门信息、任务信息、任务对应文件信息。持有证书的部门可以加入通信系统,客户端提供接口,可以修改、增加、删除部门信息。增加部门信息,要确保部门具有不同的IP地址。客户端数据库中部门信息,必须包含自己本身部门信息;同时也必须包含其他服务器部门信息,以IP地址相区分。通过API接口可以修改、增加和删除部门信息。服务器部分也同样提供API接口,只是对应数据库中只有服务器自己本身的信息,界面与客户端数据库部门信息接口一样。
同时,服务器与客户端也增加了对历史任务信息的查询。图2所示为客户端对应查询界面,给定开始与结束时间,就可查询期间的所有任务信息,任务信息按时间顺序排列。与客户端相似,服务器端也提供历史任务查询,给定查询条件进行查询后,满足条件的任务信息显示在列表中,双击列表上的某个任务,直接打开任务所在的文件夹,双击任务“烟台-1”,该任务对应的文件夹“C://duty/烟台-1”打开,可看到具体的文件信息。
任务续传
图2 客户端数据库接口:查询历史任务
任务续传能够确保未完成任务在系统重新运行后,实现自动重连并继续完成文件上传。其逻辑流程是:在远程服务器已经启动的前提下,服务器在启动时同样对数据库进行查询,以便将未完成任务加入任务管理队列。客户端启动时,把所有未完成任务加入队列,并根据任务信息向服务器发送重连请求(RegUnfiCMD),服务器接收到该请求后,激活任务队列里的任务。客户端启动后,黑色方块代表未完成任务加入任务队列,同样服务器端也把未完成任务加入任务队列。客户端首先发送重发命令以激活服务器端任务,任务变成右斜线方块,实质上就是建立SSL通道,并使未完成任务处于可执行状态。新注册的任务由左斜线方块表示,新注册的任务需要在双方写数据库等操作,这与未完成任务不同操作。其流程如图3所示。
客户端任务续传的相关代码在HandleData函数中,其代码如图4所示。
网络断开后自动重连
如果客户端与服务器通信过程中,发生网络中断。客户端一旦发现与相关服务器的SSL通道无效时,就做网络重连工作,工作流程如下:
图3 任务续传
(1)客户端清空任务管理队列(只有断开服务器相关的任务),并重新读数据库,加载未完成任务。服务器将相关任务置为网络断开状态,等待客户端发送的任务激活命令。
(2)客户端将重新读出的未完成任务,加入队列,重新向服务器发送未完成任务的激活命令,从而执行续传。
对于这个断网后,又重新加入任务队列激活的任务,加入队列的位置,有不同的选择。目前的系统设计加入该类任务的方式是简单的加入队列后边,因此影响任务调度顺序。在将来的系统改进中,可以考虑增加更多可选的调度策略。当客户端检测到与服务器的SSL通道无效时,就使该连接对应的任务清除出任务管理队列,并使该连接失效。并开启定时器检查是否数据库中对应该服务器的未完成任务,如果有实现自动重连到服务器。如果与断开的服务器相关的任务都已完成,就不会发送重连请求。
图4 任务续传代码
图5 定时器处理函数
在实验测试中,采用服务器退出再启动(相当与使连接无效)来模拟网络断开,客户端将清除对应连接,并启动定时器实现自动重连。定时器处理函数如图5所示。
自动重连机制实现了无人工管理,只要通信双方间的SSL通道失效,客户端会定时查询数据库检查是否有未完成任务,若存在,立即向对应服务器发送连接请求,直到服务器应答,建立连接。若服务器此时不可达,客户端会每隔一段时间实现重连,直到连接建立,继续完成任务上传。
任务续传机制实现了客户端启动后首先进行数据库查询,查询是否存在以前未完成任务,如果存在则向任务对应的服务器发送建立连接请求,并激活未完成任务,最终完成任务的续传。