C#HTTP多线程断点续传下载,关于迅雷的HTTP请求中的range标头的疑问
最近公司做一个基于智能客户端的项目,让用户在下载主程序后通过验证再下载配置文件和一个库(50多M),由于工作需要和兴趣我就请缨做一个多线程断点续传下载的组件.
开始是每接收一次LOCK流 定位再写入磁盘.结果线程越多越慢,阻塞在写磁盘上了,数据还在系统的TCP缓冲区里,还容易超时,
看来得用一个后台线程写磁盘.分配一个大的内存块用来异步写磁盘
可又有个问题:缓存多大,怎么区分个各线程的数据,长度
再Seek到相应的位置写入
请教各位 有何妙策!
~~~~~~~~~~~~~~~~~~~~~~~~~~
别外 发现迅雷的多线程HTTP请求很奇怪
比如10个线程,文件长度为10000字节,
我用的是每个线程平均分一段range
线程1 range:0-999
线程2 range:1000-1999
.
.
.
线程10:range:9000-9999
而迅雷的请求是这样的
线程1:range :0-9999
线程2:range :1000-9999
线程3:range :2000-9999
.
.
.
.
线程10:range:9000-9999
是不是WEB服务器有缓存优化,最先到达的请求要返回的内容有缓存在内存中后面的请求直接从内存中发送给client
而迅雷的客户端每个线程只读取1000个字节??