5 客户端工作流程 需要指出的是表1列出的是基本的流程。实际中客户端工作流程会比表1复杂的多。 主程序启动之后,创建自动升级程序的线程。该线程在后台运行,首先读出产品的序列号,通过url参数传值的形式传到web端。此处传值可以更加灵活,可以在用户允许的前提下,将更多的信息传给服务器。例如当前软件版本,客户端操作系统版本,客户端计算机硬件信息等等。 运行在web端的脚本响应请求,判断序列号是否合法,即序列号是否正确,是否过期。通过之后输出与该序列号对应的软件的所有文件列表。 自动升级程序开始通过http协议下载这个列表。下载完毕后读出上一次升级之后,保存下来的文件列表,并与下载下来的列表进行对比,通过时间戳对比找出新文件。通常只要时间戳不一样就将文件加入的需要下载的文件列表中,也可以采用时间戳转成浮点数后大小对比的策略。例如平台中放的是稳定的正式版,而有些客户端已经通过其他途径得到新版本更高的测试版。第二种策略就可以避免高版本文件通过升级之后版本降低。这也是为什么采用时间戳,而不是文件md5唯一哈希值的原因。 得到新文件列表之后,再次通过http协议逐一下载新文件到缓存目录中。下载新文件的url由文件编号和序列号共同确定。每下载一个文件,更新一次本地的文件列表。这样如果出现网络中断,用户退出等异常,下次启动可以跳过已经下载过的文件。虽然这不是严格意义上的断点续传,但在一定程度上提高了程序的容错能力。 数据全部下载完毕之后询问用户是否立即应用更新。如果是则退出主程序,将缓存文件夹中的文件移动到主程序所在的目录中,并覆盖。否则保持缓存中的文件,供下次升级使用。 6 改进及结束语 网络状况很差的时候更新所需要的时间很长。对于该问题,可以对文件进行逐个zip压缩,通过http协议传输压缩流,而不是文件本身的数据流。客户端下载之后进行解压缩。此处是对文件逐个压缩,而不是整体打包。因为整体打包之后会出现客户端只需要更新一个文件而不得不下载整个压缩包的情况。而且整体打包也对断点续传提出了更高的要求。 另外出于某种原因的考虑,有时需要更多考虑数据安全。例如未授权的序列号不能获得新版本的文件,且一个序列号只能对应一个客户端。对此可以采用动态序列号的方式,即下载完文件列表时或更新结束时,都将原有的序列号作废,动态创建一个新的值。 另外对于重大缺陷的修复更新,更希望能强制更新。对此可以在自动更新程序发现更新时,强制停止主程序的响应。通过这一策略甚至可以做到所有的新版本发布之后,客户端迅速跟进,并全部更新到最新版本。 笔者使用微软的c#语言来实现,经过反复测试,发现zip压缩之后,对网络要求低了很多,更新效率提高很多。通过动态序列号及强制更新策略也基本能保证客户端版本可控。 参考文献 [1].数据库系统导论[m].北京:机械工业出版社,2000. [2]殷人昆.数据结构(用面向对象方法与c++描述)[m].北京:清华大学出版社,1999. [3]莫勇腾.深入浅出设计模式(c#/java版)[m].北京:清华大学出版社,2006.
中国论文网(www.lunwen.net.cn)免费学术期刊论文发表,目录,论文查重入口,本科毕业论文怎么写,职称论文范文,论文摘要,论文文献资料,毕业论文格式,论文检测降重服务。 返回电子论文列表