ServerXmlHttp 研究副产品

这两天在研究 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 后缀):
https://p-blog.csdn.net/images/p_blog_csdn_net/dkfdtf/EntryImages/20090420/sxh.rar.jpg

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值