博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程断点下载原理
阅读量:5050 次
发布时间:2019-06-12

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

上传到服务器原理

   

 

商议客户端将文件长度Length、文件名NameId文件id以协议的形式发送到服务器。服务器判断Id是否为空,不为空时表示是断点上传,从存储断点上传文件的数据库中根据文件Id查询文件保存的Path并将Path返回,根据Path从上次的历史文件中读取上传的断点位置(断点位置记录在临时文件的*.log文件里的Properties部分了)

如果Id为空,则为初次上传,生成id,将idpath添加到数据库里

然后向客户端发送协议头Id(?包括记录断点位置的变量position=0表示初次,=p表示断点位置)并判断是否传输完毕。传输完毕删除数据库中的记录和临时文件,没有传输完毕继续传输

文件上传到客户端:

 

 

原理:

客户端从本地数据库(数据库包括文件本地路径path,服务器返回的id)查询有无上传记录有的话构造协议(文件长度、文件名字、id);没有的话构造协议中id=nullsocket请求返回字段idposition与如果第一次上传返回服务器随机生成唯一idposition=0就是第一次上传,将(idpath)添加到数据库;否则就是断点续传id=sourceidposition为上次上传的历史记录位置,从position开始上传并监视是否完成,上传完成时删除数据库存储的记录,没有上传完成时继续上传。

下面是多线程下载

 

 

原理:

连接服务器获取下载文件的大小,根据数据库中存放的信息(id=下载路径,Date=map(线程id,进度position))判断文件是否已经存在。不存在,划分每个线程下载文件大小,启动多线程下载;存在,从数据库获取每个线程已加载的长度。开始下载并监视,未完成,将每个线程已下载位置存放在数据库;完成,结束

转载于:https://www.cnblogs.com/yanghongliang/p/5750819.html

你可能感兴趣的文章
小程序底部导航栏
查看>>
Codeforces Gym101505G:Orchard Division(扫描线+线段树第k大)
查看>>
ibatis学习笔记
查看>>
18-ES6(1)
查看>>
poj1611 简单并查集
查看>>
tensorflow实现迁移学习
查看>>
Ubuntu 14.04下安装CUDA8.0
查看>>
跨平台开发 -- C# 使用 C/C++ 生成的动态链接库
查看>>
关于Redis处理高并发
查看>>
C# BS消息推送 SignalR介绍(一)
查看>>
asp.net core 系列 16 Web主机 IWebHostBuilder
查看>>
WPF星空效果
查看>>
WPF Layout 系统概述——Arrange
查看>>
PIGOSS
查看>>
几款Http小服务器
查看>>
iOS 数组排序
查看>>
第三节
查看>>
PHP结合MYSQL记录结果分页呈现(比较实用)
查看>>
Mysql支持的数据类型
查看>>
openSuse beginner
查看>>