首页 新闻 会员 周边 捐助

socket上传输大文件时,如何能提高传输的效率?

0
悬赏园豆:10 [已解决问题] 解决于 2009-08-17 11:26

socket上传输大文件时,如何能提高传输的效率?

百无禁忌的人的主页 百无禁忌的人 | 初学一级 | 园豆:177
提问于:2009-08-07 15:05
< >
分享
最佳答案
0

既然是Socket  那就是传2进制的数据 也就是字节数组 使用 某种网络协议,点对点的传输数据。

   提高的效率可以分为三部分!

      1. 网络情况。  下哔片什么的我们这里不讨论,但是首先你要明确你的网络类型,你的带宽允许你多大的传输量才好写程序。网卡我们暂时不讨论。

     2. 服务器情况。  国内的网络运营商都会 限制很多机房服务器的上传限额。下行200k 上行可能只有20k。也就是1:10 你网络没问题程序没问题,服务器不吃,也没办法! 所以这个也要解决。

    3 如果上面两个都不是问题,那就完全是程序方面的了,我们开始讨论。

        假设你需要制作一个提供至少1G 的单体文件上传,你会怎么办。我想你绝对不会 搞一个线程 慢慢读过去。

  为什么? 因为如果断网,死机,或者停电,你又要从头来。

     所以 效率这个概念既然提出来了就不光是速度问题。还有实用性的问题。但是我们不上升到一个完整的下载上传软件的高度。

         所以你可以看到以下的概念:

           上传端:

           (1). 将你的文件包分割成数据模型,并以一个配置文档描述。这个文档可以很小 1G的文件几k足以。

              (2) 根据分割情况开启数个线程,根据你的网络情况去调整你的每一传输线程里的 byte数组大小。

             (3) 控制好线程管理, 如果这个程序能独享一台电脑的话 就全部全力工作。

            接收端:

             首先接收到你的说明文件 ,然后根据情况开启接受程序,并按照你的说明文件,将每个线程里的数据重构到一个临时文件里。并且开始重写说明文件,介绍各个情况的进度,与位置。

            于是 一个简单的断点续传就这么出来了。

              传输效率这是个很大的命题,算法是一部分,形式是一部分,网络是最重要的一部分。

             以上。

收获园豆:10
西凡 | 初学一级 |园豆:139 | 2009-08-07 17:52
讲的很详细,有没有例子参考下
百无禁忌的人 | 园豆:177 (初学一级) | 2009-08-12 15:55
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册