有好几台服务器,下载都从这几台服务器下
数据即时播放,我现在是分成很多小块给几个线程
并发下载,但是总会有前面的数据没到 后面的却下完了
的情况,不知道大家做下载工具时在有多个源的情况下
速度如何提上去的?

解决方案 »

  1.   

    我现在是一块相当于一组了,50K 一块
    下完就放进去播放,但是有时会出现:第10块下完了,第0块还没下完的情况
    我开始想用抢先式,比如某个线程下完一块,然后判断下载队列的某一块是否超时(我设定一个超时时间,比如2秒)
    但是又想把超时的那一块已下了的部分数据拿回来继续接着下
    但发现太难控制了,锁多又可能慢了,不知道sms88兄有什么好的建议?
      

  2.   

    你是从多台机器上下载数据块,有些接近p2p了。
    像pplive、迅雷等p2p点播都是有视频缓冲的,先下载到一段视频数据后再开始播放。你可以把需缓冲的数据量设置大些,若只是缓冲50K的数据的话,我估计不到1秒就播放完了。这样就给某块数据因超时而未下载完转向从其它机器或者继续尝试下载留有时间,你也可以把那块未下载完的数据再分成几段去从多个服务器上下载。那些服务器的上传也可以更改代码么?要是可以的话,你可以这样考虑:
    记录本地哪块数据有无的数据结构 ,称为 位图信息。
    本机向所有服务器发送请求某块数据的命令,一有select的read触发后,接收完了就向所有服务器发送取消下载这块数据的命令,未开始发送这块数据的服务器就可以不发送了,也更新本地的位图信息,要是以后还是收到这块数据的话,就不用放入缓冲区了。
    所有的socket都是使用的非阻塞式,本地接收到的任何数据包都可以放入一个buffer里,本地需要发送的数据包也都放入另外一个buffer里。轮循这两个buffer,比如接收到的那个buffer里合法的数据包就处理,并从buffer头移除
      

  3.   

    我是一个线程连一个服务器
    这个几个服务器性能动态的变化着
    实际就是几个HTTP web服务器
    我先前基本这么做了,我发现如果在
    发现某一块超时后能被速度快的线程抢过去下,并且是
    接着下效果更好一些
      

  4.   

    这回好了,NND
    我试了N钟方法,都不满意
    后来想起电驴里有一种对源节点存活速度之类的
    动态更新算法
    我动态的更新资源服务器速度信息,超时就拿速度较快的来
    下载,效果好多了,就这么办着先,节点多,这些什么速度都不成问题了
    稳定压倒一切