今天要在某度盘下载一些大文件,当然限速很厉害…… 于是昧着良心想给 Aria2c 多加几个线程 :P 不幸原版 Aria2 硬编码写死了最高 16 线程…… 那么,开源软件我可以自己来改啊~
更新:已交叉编译得到树莓 pi ARMv7 的 1.32.0 版本,32bit 静态编译
源码 OptionHandlerFactory.cc
里搜索变量 TEXT_MAX_CONNECTION_PER_SERVER
,后面的 16 改成任意整数(这里改成 10240,注意避免整型溢出),像下面这样
{
OptionHandler* op(new NumberOptionHandler(
PREF_MAX_CONNECTION_PER_SERVER,
TEXT_MAX_CONNECTION_PER_SERVER,
"1", 1, 10240, 'x'));
op->addTag(TAG_BASIC);
op->addTag(TAG_FTP);
op->addTag(TAG_HTTP);
...
}
就解除了最高 16 线程的限制。编译完成亲测可正常开 32 线程,开太多怕翻车被封号((
其他一些窍门:
- aria2 配置的
split
和max-connection-per-server
最好设置成相同的值,这样能够最大化利用每个线程来下载; - 把
max-tries
设为 0,retry-wait
设为 5(大于零整数,不要太小),这样当线程太多而被服务器返回 50X 时能自动重连,保持总线程数不下降; max-file-not-found
设为 0 (此项默认就是 0),无限等待服务器发送数据直到完成下载。
附上我编译出来 Linux x86_64 的版本,在下面的图里(图片另存为文件,改成 zip 后缀解压)。Windows 的版本也在图里,是某大神直接 hack 二进制文件得到的,上限 4096 个线程。
Linux 版本的信息:
aria2c-spam-linux: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=77198dffab8fce979c9944bf7ceb6b639358dd92, not stripped
Windows 版本的信息:
aria2c-4096-win.exe: PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows
USE AT YOUR OWN RISK! 小心使用后果自负没有保证,万一翻车不要来找我ㄟ( ▔, ▔ )ㄏ
更新:ARMv7 树莓 pi 的版本我已交叉编译得到,aria2 版本为 1.32.0,静态链接,
ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.26, BuildID[sha1]=9c4b35d24b1b1f44b68bf6e27345421e3e0296b6, stripped
所用库:
zlib/1.2.11 expat/2.2.4 sqlite3/3.20.1 OpenSSL/1.0.2l c-ares/1.13.0 libssh2/1.8.0
所以现在可以用树莓派挂机下某盘啦!高速又省电😏 可执行二进制文件大小 6.2 MB,体积较大不方便放入图片,有需求可 email 向我索要。