Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(alias): add DownloadConcurrency and DownloadPartSize option #7829

Open
wants to merge 10 commits into
base: main
Choose a base branch
from

Conversation

j2rong4cn
Copy link
Contributor

@j2rong4cn j2rong4cn commented Jan 17, 2025

别名(alist)驱动添加两个选项。需要开启代理才有效

  • Download concurrency(下载并发)
  • Download part size(下载分片大小。单位KB)

有什么用?

  • 设置:别名驱动
    本地代理
    下载并发:10
    下载分片大小:1024
    路径:云盘的挂载路径
  • 效果 :
    客户端 > alist别名驱动 :1个连接
    alist别名驱动 > 云盘 :10 个连接并发
    实际并发看云盘限制
    单线程速度慢支持并发的云盘 通过别名的多并发
    1. 在线看视频、下载等 可以提速
    2. 从 别名 复制到 其他驱动 也可以提速

温馨提示:请不要滥用,否则云盘账号异常 后果自负

配置文件添加新选项:max_concurrency

限制本地代理的最大并发,默认为64,0为不限制

@xrgzs
Copy link
Contributor

xrgzs commented Jan 17, 2025

在客户端支持多线程下载的情况下,测到会出现连接数过高的情况。

是否能够限制一下,只在一侧实现多线程下载?不然这连接数太恐怖了。

@j2rong4cn
Copy link
Contributor Author

在客户端支持多线程下载的情况下,测到会出现连接数过高的情况。

你这是什么客户端,多线程下载器吗?
这个适合给单线程的客户端 加速,例如播放器,alist的复制也只适合复制单个文件

@j2rong4cn
Copy link
Contributor Author

可以加个 全局最高并发数限制

@j2rong4cn
Copy link
Contributor Author

j2rong4cn commented Jan 17, 2025

是否能够限制一下,只在一侧实现多线程下载?不然这连接数太恐怖了。

你试一下alias套alias,,就是只有一侧是多线程的。。
这个得看客户端的多线程实现方法

  • 如果是 每个并发 只请求 分片大小的 就是 一侧多线程(这个PR的方案。适合在线播放 )
  • 如果是 一个文件 多个线程下载,其中有一个线程下载完了再分片的 这种就不行 (大多数多线程下载器。适合下载 )

@hshpy
Copy link
Contributor

hshpy commented Jan 18, 2025

在客户端支持多线程下载的情况下,测到会出现连接数过高的情况。

是否能够限制一下,只在一侧实现多线程下载?不然这连接数太恐怖了。

客户端多线程直接用原驱动。
每个请求开启一个多线程下载器会占用系统内存,ra小于分片大小就是客户端侧多线程。

@j2rong4cn
Copy link
Contributor Author

@xrgzs 你那个什么云盘,能有那么多并发。。现在你再试试

@xrgzs
Copy link
Contributor

xrgzs commented Jan 18, 2025

@j2rong4cn OneDrive + IDM,alias按照你的参数设置,IDM 16线程

@xrgzs
Copy link
Contributor

xrgzs commented Jan 18, 2025

可以尝试判断一下客户端的 Range 请求头,或者屏蔽一下 Accept-Range 响应头

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Range

https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Accept-Ranges

不过这样应该会导致浏览器播放视频的时候无法实现快速时移

@xrgzs
Copy link
Contributor

xrgzs commented Jan 18, 2025

调大分片大小到10MB,问题得以缓解

@j2rong4cn
Copy link
Contributor Author

不过这样应该会导致浏览器播放视频的时候无法实现快速时移

并不会,只要与客户端连接断开就停止所有的并发

@j2rong4cn
Copy link
Contributor Author

OneDrive + IDM,alias按照你的参数设置,IDM 16线程

我是aria2 16线程 alist限制10线程 测试的,向云盘服务器的并发 并不会超过10

@j2rong4cn
Copy link
Contributor Author

调大分片大小到10MB,问题得以缓解

建议根据单线程速度设置分片大小,例如阿里云盘500kb/s 设置1~2m会有很好的播放体验

@hshpy
Copy link
Contributor

hshpy commented Jan 18, 2025

OneDrive + IDM,alias按照你的参数设置,IDM 16线程

我是aria2 16线程 alist限制10线程 测试的,向云盘服务器的并发 并不会超过10

aric2默认分片选择算法,下载2GB文件分片数2的话,alist会收到0-1G,1G-2G两个不同ra的url,alist并发线程10会有20个并发请求。
他上面那种应该是块顺序下载,如果块大小是4MB,alist会收到512个不同url,虽然不会立刻全部收到,但也跟上面不是一个数量级的,还会报错重试的连接,alist分片设置太大有爆内存风险。

客户端多线程选择原驱动。

@j2rong4cn
Copy link
Contributor Author

alist会收到512个不同url

不管alist收到多少都不会超过限制

客户端多线程选择原驱动。

👍最正确确的用法。多线程下载使用原驱动,播放器使用alias然后并发

@xrgzs
Copy link
Contributor

xrgzs commented Jan 18, 2025

现在你再试试

@j2rong4cn 可以,现在连接数正常了

PS > Get-Process -Name main | Select-Object Id

   Id
   --
27120

PS > Get-NetTCPConnection -OwningProcess 27120 | Measure-Object

Count             : 67
Average           :
Sum               :
Maximum           :
Minimum           :
StandardDeviation :
Property          :

@j2rong4cn j2rong4cn closed this Jan 18, 2025
@j2rong4cn j2rong4cn reopened this Jan 18, 2025
@j2rong4cn j2rong4cn force-pushed the perf branch 3 times, most recently from f2ce10c to bf413b5 Compare January 21, 2025 20:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants