nodejs通过JSON-RPC调⽤aria2接⼝
今天继续之前的下载服务器的开发,第⼀步是调⽤⽂件的 API,第⼆步是列出应⽤⽬录下的所有⽂件,今天的⽬标是调⽤后台接⼝进⾏下载。
1. aria2 配置
这⾥,我们⽤到的是 aria2,aria2 是⼀个命令⾏下运⾏、多协议、多来源下载⼯具。它除了可以像 wget ⼀样直接下载⽂件外,最主要的功能是可以启⽤后台服务,启动后等着从 rpc 接⼝添加任务。
在⼀⽂中,提到启动的⽅式为:
aria2c --enable-rpc --rpc-listen-all &
⽤命令⽅式导致配置不⽅便修改保存,推荐启动⽅式是使⽤配置⽂件 $HOME/.f 来进⾏启动。
aria2c --conf-path=/home/pi/.f &
1) ⾸先,创建 f ⽂件
vi ~/.f
2) 输⼊内容:
#允许rpc
enable-rpc=true
#允许⾮外部访问
rpc-listen-all=true
#RPC端⼝, 仅当默认端⼝被占⽤时修改
rpc-listen-port=6800
#最⼤同时下载数(任务数), 路由建议值: 3
max-concurrent-downloads=10
#断点续传
continue=true
#同服务器连接数
max-connection-per-server=10
#最⼩⽂件分⽚⼤⼩, 下载线程数上限取决于能分出多少⽚, 对于⼩⽂件重要
min-split-size=10M
#单⽂件最⼤线程数, 路由建议值: 5
split=10
#下载速度限制
max-overall-download-limit=0
#单⽂件速度限制
max-download-limit=0
#上传速度限制
max-overall-upload-limit=0
#单⽂件速度限制
max-upload-limit=0
#⽂件保存路径, 默认为当前启动位置
connect下载
dir=/home/pi/Downloads
3) 增加系统启动脚本(raspberrypi 系统还有待研究)
2. 编写 nodejs 代码
1) aria2 JSON-RPC 接⼝以及 nodejs 模块
2) 封装 websocket client
var WebSocketClient = require('websocket').client,
client = new WebSocketClient(),
conn,
cb,
cbmap = {};
<('connect', function(connection) {
console.log('INFO: WebSocket client connected to Aria2.');
<('error', function(error) {
<("ERROR: Connection Error: " + String());
});
<('close', function() {
console.log('INFO: Connection Closed');
});
<('message', function(message) {
if (pe === 'utf8') {
var data = JSON.parse(message.utf8Data);
if (typeof cbmap[data.id] === 'function') {
var result = {
obj: data,
err: ? new message) : false
};
cbmap[data.id](result);
}
delete cbmap[data.id];
}
});
conn = connection;
if (typeof cb === 'function') {
cb();
}
});
<('connectFailed', function(error) {
<('ERROR: Client Error: ' + String());
});
function connect(callback) {
cb = callback;
}
function uuid() {
return'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { var r = Math.random() * 16 | 0, v = (c === 'x') ? r : (r & 0x3 | 0x8);
String(16);
});
}
function send(command, callback) {
var id = uuid();
if (typeof callback === 'function') {
cbmap[id] = callback;
}
command.jsonrpc = '2.0';
command.jsonrpc = '2.0';
command.id = id;
conn.sendUTF(JSON.stringify(command));
}
exports.send = send;
3) 调⽤ websocket 开始下载:
var websocket = require('./websocket');
websocket.send({
method : 'aria2.addUri',
params : [['wenzhixin/images/header_bg.jpg']]
}, function(result) {
console.log(result);
});
});
到这⾥,查看 /home/pi/Downloads,可以看到已经成功下载了 header_bg.jpg ⽂件,已经可以调⽤后台的 aria2 接⼝进⾏添加下载地址并下载我们想要的东西了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。