博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
socket上传输大文件时,如何能提高传输的效率?
阅读量:6717 次
发布时间:2019-06-25

本文共 825 字,大约阅读时间需要 2 分钟。

hot3.png

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

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

1. 网络情况。  下哔片什么的我们这里不讨论,但是首先你要明确你的网络类型,你的带宽允许你多大的传输量才好写程序。网卡我们暂时不讨论。 2. 服务器情况。  国内的网络运营商都会 限制很多机房服务器的上传限额。下行200k 上行可能只有20k。也就是1:10 你网络没问题程序没问题,服务器不吃,也没办法! 所以这个也要解决。3 如果上面两个都不是问题,那就完全是程序方面的了,我们开始讨论。    假设你需要制作一个提供至少1G 的单体文件上传,你会怎么办。我想你绝对不会 搞一个线程 慢慢读过去。

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

所以 效率这个概念既然提出来了就不光是速度问题。还有实用性的问题。但是我们不上升到一个完整的下载上传软件的高度。     所以你可以看到以下的概念:       上传端:       (1). 将你的文件包分割成数据模型,并以一个配置文档描述。这个文档可以很小 1G的文件几k足以。          (2) 根据分割情况开启数个线程,根据你的网络情况去调整你的每一传输线程里的 byte数组大小。         (3) 控制好线程管理, 如果这个程序能独享一台电脑的话 就全部全力工作。        接收端:         首先接收到你的说明文件 ,然后根据情况开启接受程序,并按照你的说明文件,将每个线程里的数据重构到一个临时文件里。并且开始重写说明文件,介绍各个情况的进度,与位置。        于是 一个简单的断点续传就这么出来了。          传输效率这是个很大的命题,算法是一部分,形式是一部分,网络是最重要的一部分。         以上。

转载于:https://my.oschina.net/u/571157/blog/114503

你可能感兴趣的文章
Android 命令设置获取、IP地址、网关、dns
查看>>
弹性碰撞 poj 3684
查看>>
查找当前薪水(to_date='9999-01-01')排名第二多的员工编号emp_no、薪水salary、last_name以及first_name,不准使用order by...
查看>>
[SQL in Azure] Windows Azure Virtual Machine Readiness and Capacity Assessment
查看>>
关于CCR测评器的自定义校验器(Special Judge)
查看>>
java设计模式之 装饰器模式
查看>>
loadrunner-3-18Service-Level Agreement(服务水平协议)
查看>>
Python编程-基础知识-列表和元组
查看>>
利息力(force of interest)
查看>>
Oracle 角色及其权限
查看>>
NiftyDialogEffects:集成了多种动画效果的Dialog控件
查看>>
《世界是数字的》读后感
查看>>
AD软件原理图封装过程(即由原理图转换到PCB)
查看>>
cocos2d-x lua table与json的转换
查看>>
mysql的基本原理
查看>>
《面向对象分析与设计》——抽象
查看>>
linux学习记录-------jdk安装配置
查看>>
查看dll依赖项
查看>>
koa和egg项目webpack热更新实现
查看>>
ansible普通用户su切换问题
查看>>