8000 feat(alias): add `DownloadConcurrency` and `DownloadPartSize` option by j2rong4cn · Pull Request #7829 · AlistGo/alist · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

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

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

Merged
merged 10 commits into from
Jan 27, 2025

Conversation

j2rong4cn
Copy link
Contributor
@j2rong4cn j2rong4cn commented Jan 17, 2025

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

  • DownloadConcurrency(下载并发)
  • DownloadPartSize(下载分片大小。单位KB)

有什么用?

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

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

配置文件添加新选项:max_concurrency

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

@xrgzs
Copy link
Contributor
xrgzs commented Jan 17, 2025
8000

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

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

@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
< 8000 summary data-view-component="true" class="timeline-comment-action Link--secondary Button--link Button--medium Button"> 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
8000 @j2rong4cn j2rong4cn force-pushed the perf branch 3 times, most recently from f2ce10c to bf413b5 Compare January 21, 2025 20:28
@xhofe xhofe merged commit 2be0c3d into AlistGo:main Jan 27, 2025
6 checks passed
@j2rong4cn j2rong4cn deleted the perf branch January 28, 2025 04:16
@Andreerassel
Copy link

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

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

有什么用?

  • 设置:别名驱动
    本地代理
    下载并发:10
    下载分片大小:1024
    路径:云盘的挂载路径

  • 效果 :
    客户端 > alist别名驱动 :1个连接
    alist别名驱动 > 云盘 :10 个连接并发
    实际并发看云盘限制
    单线程速度慢支持并发的云盘 通过别名的多并发

    1. 在线看视频、下载等 可以提速
    2. 从 别名 复制到 其他驱动 也可以提速

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

配置文件添加新选项:max_concurrency

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

请问下我在config.json设置了最大并发数和最大连接数,夸克网盘还是限速而不是多线程,请问该如何正确设置或者添加代码呢?
image
image

@j2rong4cn
Copy link
Contributor Author

请问下我在config.json设置了最大并发数和最大连接数,夸克网盘还是限速而不是多线程,请问该如何正确设置或者添加代码呢?
image
image

max_connections 应该是 客户端与alist 的最大连接数
max_concurrency 是 alist向云盘下载 的最大并发数

并发下载功能集成在 别名(alias)驱动

@kebeschen
Copy link

这个在哪里用啊 我看集成了 在哪里用呢

@j2rong4cn
Copy link
Contributor Author

这个在哪里用啊 我看集成了 在哪里用呢

管理 - 存储 - 添加 - 别名驱动

@kebeschen
Copy link

实在抱歉,晚上我用kodi测试看视频,发现视频一直加载不出来,那个maxconnection,最大原来是多少 ,我修改过。
目前就是我设置的看视频缓存是1G,下载并发是10,部分大小10240kb,我的网速是300M宽带,我可以看到速度飙到40m/s,但就是不加载视频。

@j2rong4cn
Copy link
Contributor Author

maxconnection,最大原来是多少

0

@kebeschen
Copy link

非常感谢,实测成功,安卓使用alistfluter的朋友 最后两个 下载同义词就是下载并发,不要误解了这个 现在kodi实测可以跑满带宽速度,40m/s,300M的带宽,非常之快,我的kodi的缓存设置的2G,下载并发数10,下载区块40960。

Screenshot_20250316_003713_com github jing332 alistflutter

@kebeschen
Copy link

不需要像上面的朋友修改本地文件,我修改之后出了错误,直接就在挂载里设置就可以

@kebeschen
Copy link

另外如果是在宿舍,大家用的一条宽带,且有svip会员,并发数设置2就可以,23M/s,完全足够了,不然会占满,别人基本看不了了

@faajaudai
Copy link

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

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

佬,能不能解释一下这里“单线程速率”和“分片大小”的设置技巧吗?
如你举例,意思是500kb/s可以很快完成一个分片的下载,所以加上多线程后体验不错的意思吗?
所以技巧应该是设置的分片大小不要超过单线程速率太多,是吗?
如果我单线程2mb/s,那我是设置6m或8m这样一个分片都是适合的咯?

另外就是,我不知道怎么验证某个网盘是否支持多线程,
如果我使用了别名驱动设置了多线程,但恰好这个网盘不支持,程序会怎么处理呢?
第一条线程成功,后面的线程连接被拒绝,他会一直重复去请求吗?

@j2rong4cn
Copy link
Contributor Author
j2rong4cn commented Apr 24, 2025

如果我单线程2mb/s,那我是设置6m或8m这样一个分片都是适合的咯?

合适。实时预览例如视频播放尽快的返回后续分片播放就不会卡加载

如果我使用了别名驱动设置了多线程,但恰好这个网盘不支持,程序会怎么处理呢?

并发下载需要服务器支持这个请求https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Reference/Headers/Range
不支持会直接报错,所有云盘基本都支持

第一条线程成功,后面的线程连接被拒绝,他会一直重复去请求吗?

如果第一个并发连接成功,后续的并发请求失败分两种情况
1.初始化阶段:失败则取消后续并发。
2.初始化完成:失败则每200毫秒重试一个并发

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.

7 participants
0