您的位置:首页 > 理论基础 > 计算机网络

ServerXmlHttp 研究副产品

2009-04-20 01:47 106 查看
这两天在研究 MS 的 ServerXmlHttp 组件应用,副产品是发现该组件可以轻易实现多点同时下载文件。以前研究过使用 msinet.ocx 来实现多点同时下载及断点续传,测试结果是断点续传没有问题,但多点同时下载无法实现,原因是多个 msinet 对象不能在同一进程内协同工作,一旦一个 msinet 控件的 ReadyState 值变成 4(完成)后,其他控件将停止工作,最后只有一个控件可以继续工作下去,其他都处于停止状态。然而使用 ServerXmlHttp 组件的测试结果却很好,设置好异步工作方式并发出 send 指令开始下载后,几个 ServerXmlHttp 对象可独立正常工作,也就是可以用它来实现多点同时下载,至于断点续传的方法,与使用 msinet 相似,用 SetRequestHeader('Range', 'bytes=xxxx-yyyy') 来分配不同的下载段,并保存到任务列表中即可。

下面是一个未完成的实验品,一旦需要,继续写完错误处理和中途取消功能即可;此外,实验中仅简单的用循环来判断某一任务片是否已完成,未使用该组件提供的 OnReadyStateChange 属性来做成事件驱动方式,因为它涉及到回调函数的问题(解决它虽无困难,但需要多写许多代码,研究这个组件的当务之急不是这个),所以下载效率会差很多(从下图中可以看到,2M 带宽的下载速度应该可以达到 200kb/s 左右,现在只有 170kb/s,用以前使用 msinet 控件写的来测试,由于只有一个下载点,同等条件下,速度只能达到 40kb/s 左右)。一旦需要再来实现这些功能啦,运行效果大致如下:



也是由于现在只使用了循环来检测下载片的完成,所以上面的取消按钮在下载时是不能用的,只能按 Esc 键来中断下载,重新运行后可看到断点续传的效果。

这里是研究时写的实验品(右键另存为并去掉 jpg 后缀):
http://p.blog.csdn.net/images/p_blog_csdn_net/dkfdtf/EntryImages/20090420/sxh.rar.jpg

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: