谈一谈开发网盘中碰到的问题(二)

谈一谈开发网盘中碰到的问题(二)

本项目文件下载可以概括为:

单个普通文件下载:1./ws/down 文件下载接口,文件下载接口,收集数据块、链接块用以恢复文件;若出现异常(数据块缺失等)触发冗余解码机制,完成数据块恢复;使用websocket协议反馈数据下载进度、速度信息。将文件Hash作为参数,socekt更新的percent同步下载列表文件进度。为防止因网速等因素导致token失效,在同步进度同时要在socket推送过程中触发/combo/123请求来延长token
2.unpack ipfs下载完毕后,需要将文件通过浏览器下载器弹出。

在这里插入图片描述

文件夹下载:1.file_dir_info

在这里插入图片描述

Hash的数量就是该文件夹中文件的数量。文件夹解析完后,每个文件开启socket更新下载进度。考虑到用户体验问题,将socket请求与下载器同步。用户不需要等待所有文件下载完毕后才能看到下载器弹出。
2.tar 类似上述unpack

在这里插入图片描述

复合文件下载:1.union_file_meta 在这里插入图片描述
此处我选择的是一个大小为9.07G的复合文件,我们按照1G为一片来将复合文件分片。所以会返回10个Hash值。复合文件解析完后,每个文件片开启socket更新下载进度。
2.merge 类似上述unpack

在这里插入图片描述

Q2:window.open受制于不同浏览器弹窗权限问题,无法弹出下载器下载
处理方法:模拟表单提交的方法弹出下载器。(上述unpack、tar、merge截图)
文件、文件夹、复合文件批量下载 1.

在这里插入图片描述

将文件、文件夹、复合文件构造并糅合成新的组合。
2.每个文件片开启socket更新下载进度。
2.tar (将新组合的数据交给下载器)
Q3:如果并行上传下载文件、文件夹、复合文件任务多时,如何给浏览器缓解压力
处理方法:设置limit限制数,页面保留所有任务,自定义限制同时发送的请求数量。

在这里插入图片描述

limit:限制同时上传/下载的数量、comdoing:当前上传/下载中的任务数、comtodo:准备中的任务数。eg:limit限制为3,如果文件为4,则同时处理3个任务,只要当一个任务处理完毕,队列中的一个跻身任务中。当任务中存在多个文件和多个复合文件时,文件和复合文件同样计算任务数,而一个复合文件分片后同样记录任务数。eg:同时上传两个大小为4G的复合文件,首先被分为八个1G的分片,此时总任务数为8,同时处理3个分片,如果有一个分片完成,队列中的分片跻身任务中。
Q3:并行上传、下载的同时加进任务数,会造成进度紊乱
处理方法:FastMutex 使用 LocalStorage 实现互斥锁。使用 promise 使其更具可读性,尤其是与 async/await 一起使用时。

在这里插入图片描述

在所有存和取上传、下载列表相关信息的地方加锁
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值