吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4704|回复: 77
收起左侧

[Windows] 突破aria2原版16线程限制(详细教程附Windows成品)

  [复制链接]
~零度 发表于 2024-11-27 19:09
本帖最后由 ~零度 于 2024-11-29 09:17 编辑

一、aria2的介绍(AI生成)

aria2 是一个开源的、轻量级的命令行下载工具,支持多种协议,包括 HTTP/HTTPS、FTP、SFTP、BitTorrent 和 Metalink。以下是关于 aria2 的一些主要特点:

  1. 多协议支持aria2 能够从多种协议下载文件,这意味着你可以使用一个工具来处理不同的下载任务。

  2. 多源下载aria2 支持从多个源和位置下载同一个文件的不同部分,这可以显著提高下载速度。

  3. 断点续传:即使在下载过程中出现中断,aria2 也可以从上次中断的地方继续下载,无需从头开始。

  4. 选择性下载:在使用 BitTorrent 协议下载时,aria2 允许用户选择性地下载文件中的特定部分。

  5. 命令行界面aria2 是一个命令行工具,适合高级用户和自动化脚本。

  6. 轻量级aria2 的设计注重效率,因此它占用系统资源较少。

  7. 多线程和分段下载aria2 可以通过多线程和将文件分割成多个部分同时下载来提高下载速度。

  8. JSON-RPC 和 XML-RPC 接口aria2 提供了远程控制接口,允许第三方应用程序(如网页界面或移动应用)控制下载。

  9. 跨平台aria2 可以在多种操作系统上运行,包括 Windows、macOS 和 Linux。

  10. 支持 IPv4 和 IPv6aria2 同时支持 IPv4 和 IPv6,适应未来的网络标准。

由于 aria2 的灵活性和强大的功能,它被许多用户和开发者作为首选的下载工具,特别是在需要自动化下载任务或提高下载效率的场景中。

二、原版aria2的限制

如下图所示,原版的aria2无法设置超过16的单服务器最大连接数。对于一些下载非常慢的链接,而电脑性能又比较充足的情况下,体验较差。

原版aria2的限制

下面是某一个链接用16线程下载的速度和1000线程下载的速度,分别是234 KB/s和7.7MB/s,差距还是比较明显的。

6746fb63bd659.png (433×51)

1000线程的速度

三、修改原版aria2的源代码

原版aria2的github地址:https://github.com/aria2/aria2

需要修改的文件

  • aria2/src/OptionHandlerFactory.cc

    • 441行附近

    原版:

       OptionHandler* op(new NumberOptionHandler(PREF_MAX_CONNECTION_PER_SERVER,
                                                  TEXT_MAX_CONNECTION_PER_SERVER,
                                                  "1", 1, 16, 'x'));
        op->addTag(TAG_BASIC);
        op->addTag(TAG_FTP);
        op->addTag(TAG_HTTP);
        op->setInitialOption(true);
        op->setChangeGlobalOption(true);
        op->setChangeOptionForReserved(true);
        handlers.push_back(op);
      }

    修改后

    OptionHandler* op(new NumberOptionHandler(PREF_MAX_CONNECTION_PER_SERVER,
                                                  TEXT_MAX_CONNECTION_PER_SERVER,
                                                  "32", 1, -1, 'x'));
        op->addTag(TAG_BASIC);
        op->addTag(TAG_FTP);
        op->addTag(TAG_HTTP);
        op->setInitialOption(true);
        op->setChangeGlobalOption(true);
        op->setChangeOptionForReserved(true);
        handlers.push_back(op);
      }

    说明:此处是修改单服务器最大连接数,原版默认最大连接数1,可以设置的范围是1到16,这里改成了默认32,16改成了-1表示不限制最大值。

    • 502行附近

    原版:

       OptionHandler* op(new UnitNumberOptionHandler(
            PREF_MIN_SPLIT_SIZE, TEXT_MIN_SPLIT_SIZE, "20M", 1_m, 1_g, 'k'));
        op->addTag(TAG_BASIC);
        op->addTag(TAG_FTP);
        op->addTag(TAG_HTTP);
        op->setInitialOption(true);
        op->setChangeGlobalOption(true);
        op->setChangeOptionForReserved(true);
        handlers.push_back(op);
      }

    修改后:

       OptionHandler* op(new UnitNumberOptionHandler(
            PREF_MIN_SPLIT_SIZE, TEXT_MIN_SPLIT_SIZE, "1M", 1_k, 1_g, 'k'));
        op->addTag(TAG_BASIC);
        op->addTag(TAG_FTP);
        op->addTag(TAG_HTTP);
        op->setInitialOption(true);
        op->setChangeGlobalOption(true);
        op->setChangeOptionForReserved(true);
        handlers.push_back(op);
      }

    说明:此处修改的是最小文件分片大小,默认值由原版的20M修改为1M,最小值由1M修改为1K

    • 972行附近:

    原版:

       OptionHandler* op(
            new NumberOptionHandler(PREF_SPLIT, TEXT_SPLIT, "5", 1, -1, 's'));
        op->addTag(TAG_BASIC);
        op->addTag(TAG_FTP);
        op->addTag(TAG_HTTP);
        op->setInitialOption(true);
        op->setChangeGlobalOption(true);
        op->setChangeOptionForReserved(true);
        handlers.push_back(op);
      }

    修改后:

       OptionHandler* op(
            new NumberOptionHandler(PREF_SPLIT, TEXT_SPLIT, "32", 1, -1, 's'));
        op->addTag(TAG_BASIC);
        op->addTag(TAG_FTP);
        op->addTag(TAG_HTTP);
        op->setInitialOption(true);
        op->setChangeGlobalOption(true);
        op->setChangeOptionForReserved(true);
        handlers.push_back(op);
      }

    说明:此处修改的是默认的分割文件多线程下载的线程数量,它受到上面两个参数的影响,即线程数不能超过单服务器最大连接数,分割后最小的文件块不能小于最小文件分片大小。

四、编译

Linux系统下较为简单,无需赘述,因此只介绍windows下编译的方法

根据官方的说明文档,文本采用最简单的docker容器交叉编译方法,编译完之后直接删除docker容器和镜像即可,不需要安装额外的编译环境。

1. 安装docker

以下两种方式任选一种合适的即可,有wsl的建议用方式二

  • 方式一:下载并安装docker desktop:https://www.docker.com/products/docker-desktop/

    • 下载windows AMD64版本的

    • 切换国内镜像源

    配置windows docker的镜像

    将docker engine处的json文本修改为:

    {
      "builder": {
        "gc": {
          "defaultKeepStorage": "20GB",
          "enabled": true
        }
      },
      "experimental": false,
      "registry-mirrors": [
        "https://docker.linkedbus.com",
        "https://docker.xuanyuan.me"
      ]
    }

    也可以换成你喜欢的镜像源

    • 终端启用docker命令

    配置windows docker

  • 方式二

    • 进入wsl子系统(以ubuntu系统为例,其他的类似)

    • 安装docker

     # 安装必要的依赖
     sudo apt update
     sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
     # 添加docker的软件源
     curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
     echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
     sudo apt update
     # 安装docker
     sudo apt install docker-ce docker-ce-cli containerd.io
     # 将当前用户添加到docker用户组
     sudo usermod -aG docker $USER
     # 切换国内源,复制到下面那个EOF的位置粘贴到终端里面
     sudo tee /etc/docker/daemon.json <<EOF
    {
        "registry-mirrors": [
            "https://docker.linkedbus.com",
            "https://docker.xuanyuan.me"
        ]
    }
    EOF
     # 重启docker服务
     sudo service docker restart
     # 检查docker是否运行
     service docker status

2. 安装aria2编译环境docker镜像

到这一步,windows或者wsl子系统,操作都是一样的

3. 编译aria2

  • 运行docker容器

    mkdir aria2_custom
    # 进入docker容器,并将主机的./aria2_custom目录映射到docker容器内的/aria2_custom目录,然后运行docker容器的bash终端
    docker run -it --name aria2-build -v ./aria2_custom:/aria2_custom aria2-mingw /bin/bash
  • 复制aria2到共享目录,然后修改源代码

    容器内运行:

    cp -r /aria2/* /aria2_custom/

    参考第三节,使用你喜欢的方式修改 ./aria2_custom/src/OptionHandlerFactory.cc

    因为容器内的/aria2_custom目录和主机的./aria2_custom是共享的,因此直接在容器外部修改代码文件即可,可以使用vim命令或者记事本等工具

  • 编译aria2

    容器内运行:

    cd /aria2_custom
    autoreconf -i
    ./mingw-config
    # 4线程编译
    make -j4
    i686-w64-mingw32-strip src/aria2c.exe
  • 拷贝编译好的aria2c.exe

    在容器外部将./aria2_custom/src/aria2c.exe,拷贝出来,放到你需要的位置即可

    可以直接覆盖替换原有的aria2c.exe,结合aria2 gui软件使用



成品蓝奏云下载地址:https://wwwb.lanzn.com/i0Nzl2ggrije  密码:c1f4
找了一圈,网上确实没有特别好用的图形界面客户端,还支持随意替换集成的aria2c的,基本上找不到,反而我现在用的这个是最方便的。因此分享给大家下载:
aria2 GUI图形化软件: https://wwwb.lanzn.com/i6PwD2ghde4h 密码: dwjt
已经替换好了,解压后先运行“aria\Bin\HideRun.vbs”,这个是用vbs隐藏命令行黑窗口把aria2服务启动起来,不会有界面弹出,然后打开里面的gui界面,或者你喜欢的任何界面都行,都是通过rpc和aria2服务通讯的,原理都是一样的。
gui界面程序路径:“aria\AriaNg\AriaNg.exe”
使用GUI界面软件有一个比较坑的问题,GUI软件它里面封装了aria2程序,不知道怎么替换,如果在里面修改aria2的配置会把你在外面启动的aria2服务给顶下去,然后线程数又被限制了
因此建议直接修改Bin目录下的"aria2.conf"配置文件,把"max-connection-per-server="以及“split=”后面的数字改成你需要设置的线程数量即可,把"min-split-size="改成1K
使用aria2 ng的浏览器扩展就没有这个问题,不知道你们有什么好的gui软件推荐吗

有人说太多线程会占用服务器资源,比较自私,我解释一下吧:

问题是我下载一个文件只要200多KB甚至几十KB每秒,需要十几个小时才能下载完,没办法呀,连续挂机下载十几个小时更浪费我的电和电脑,而且对服务器的资源占用只不过是从峰值占用变成了长期占用,并没有减少。
我也不知道为什么会这么慢。既然开多线程能提速,说明实际的带宽并没有那么小。
下载链接的域名是:s3.ap-northeast-2.wasabisys.com

真要是百度阿里的,也不会这么慢。中小网站没做限制的,它本身服务器带宽就很小,我开多线程没啥意义,而且只要是国内的服务器,没有故意限速的话,也不会慢到哪里去。这种主要是针对国外网站下载太慢的问题。

免费评分

参与人数 10吾爱币 +11 热心值 +10 收起 理由
笙若 + 1 + 1 谢谢@Thanks!
nndyky + 1 + 1 鼓励转贴优秀软件安全工具和文档!
853679185 + 2 + 1 热心回复!
wxn2023 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
树袋熊睡醒了 + 1 + 1 谢谢@Thanks!
dogox + 1 + 1 我很赞同!
starf + 1 + 1 谢谢@Thanks!
zigong26 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
lotus136 + 1 + 1 用心讨论,共获提升!
某些人 + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| ~零度 发表于 2024-11-29 09:09
本帖最后由 ~零度 于 2024-11-29 09:12 编辑
pptv 发表于 2024-11-28 16:33
挺自私的做法

真要是百度,阿里这种大公司, 早就给你设置限速了, 反而多线程会被ban

问题是我下载一个文件只要200多KB甚至几十KB每秒,需要十几个小时才能下载完,没办法呀。我也不知道为什么会这么慢。既然开多线程能提速,说明实际的带宽并没有那么小。
下载链接的域名是:s3.ap-northeast-2.wasabisys.com

真要是百度阿里的,也不会这么慢。中小网站没做限制的,它本身服务器带宽就很小,我开多线程没啥意义,而且只要是国内的服务器,没有故意限速的话,也不会慢到哪里去。这种主要是针对国外网站下载太慢的问题。
iamPorter 发表于 2024-11-27 20:46
lotus136 发表于 2024-11-27 19:59
同求闪退解决办法!

本身 Aria2 就是控制台软件,运行靠运行指令,直接打开只会显示一下帮助就退出了,所以双击打开显得像“闪退”。正确打开需要通过命令提示符或者 Powershell 或者 Windows 终端,把 aria2c.exe 拖进窗口,再打个空格,再输入 URL 才可以下载。
例如: C:\Users\Administrator\Downloads>aria2c.exe [要下载的东西]
这也是为什么作者建议下载一个外置的 GUI 配合使用。
TigerPoorGuy 发表于 2024-11-27 19:10
n0rma1playe2 发表于 2024-11-27 19:11
感谢楼主分享
xp360 发表于 2024-11-27 19:12
谢谢分享
ofeng626 发表于 2024-11-27 19:18
感谢楼主分享
andytang866 发表于 2024-11-27 19:37
闪退  怎么破
andytang866 发表于 2024-11-27 19:37

要先安装原版吗,我是下载后直接打开闪退
ganbey 发表于 2024-11-27 19:40
支持,晚点试试看
hijk1 发表于 2024-11-27 19:54
伸手党在此感谢 下来试试
lotus136 发表于 2024-11-27 19:59
andytang866 发表于 2024-11-27 19:37
要先安装原版吗,我是下载后直接打开闪退

同求闪退解决办法!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-22 19:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表