设为首页 收藏本站
查看: 706|回复: 0

[经验分享] nodejs 通过 JSON-RPC 调用 aria2 接口

[复制链接]

尚未签到

发表于 2017-2-21 12:59:15 | 显示全部楼层 |阅读模式
今天继续之前的下载服务器的开发,第一步是调用文件的 API,第二步是列出应用目录下的所有文件,今天的目标是调用后台接口进行下载。

1. aria2 配置

这里,我们用到的是 aria2,aria2 是一个命令行下运行、多协议、多来源下载工具。 它除了可以像 wget 一样直接下载文件外,最主要的功能是可以启用后台服务,启动后等着从 rpc 接口添加任务。
在搭建小型下载服务器一文中,提到启动的方式为:

aria2c --enable-rpc --rpc-listen-all &

用命令方式导致配置不方便修改保存,推荐启动方式是使用配置文件 $HOME/.aria2/aria2.conf 来进行启动。

aria2c --conf-path=/home/pi/.aria2/aria2.conf &

1) 首先,创建 aria2.conf 文件

vi ~/.aria2/aria2.conf

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
#文件保存路径, 默认为当前启动位置
dir=/home/pi/Downloads

3) 增加系统启动脚本(raspberrypi 系统还有待研究)

2. 编写 nodejs 代码

1) aria2 JSON-RPC 接口以及 nodejs 模块


  • JSON-RPC 接口
  • websocket

2) 封装 websocket client

var WebSocketClient = require('websocket').client,
client = new WebSocketClient(),
conn,
cb,
cbmap = {};
client.on('connect', function(connection) {
console.log('INFO: WebSocket client connected to Aria2.');
connection.on('error', function(error) {
console.error("ERROR: Connection Error: " + error.toString());
});
connection.on('close', function() {
console.log('INFO: Connection Closed');
});
connection.on('message', function(message) {
if (message.type === 'utf8') {
var data = JSON.parse(message.utf8Data);
if (typeof cbmap[data.id] === 'function') {
var result = {
obj: data,
err: data.error ? new Error(data.error.message) : false
};
cbmap[data.id](result);
}
delete cbmap[data.id];
}
});
conn = connection;
if (typeof cb === 'function') {
cb();
}
});
client.on('connectFailed', function(error) {
console.error('ERROR: Client Error: ' + error.toString());
});
function connect(callback) {
cb = callback;
client.connect('ws://localhost:6800/jsonrpc');
}
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);
return v.toString(16);
});
}
function send(command, callback) {
var id = uuid();
if (typeof callback === 'function') {
cbmap[id] = callback;
}
command.jsonrpc = '2.0';
command.id = id;
conn.sendUTF(JSON.stringify(command));
}
exports.connect = connect;
exports.send = send;

3) 调用 websocket 开始下载:

var websocket = require('./websocket');
websocket.connect(function() {
websocket.send({
method : 'aria2.addUri',
params : [['http://wenzhixin.net.cn/images/header_bg.jpg']]
}, function(result) {
console.log(result);
});
});

到这里,查看 /home/pi/Downloads,可以看到已经成功下载了 header_bg.jpg 文件, 已经可以调用后台的 aria2 接口进行添加下载地址并下载我们想要的东西了。
 
转载自: http://wenzhixin.net.cn/2013/10/27/nodejs_json_rpc_aria2

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-345315-1-1.html 上篇帖子: nodejs多房间web聊天室 下篇帖子: NodeJs/Zen Coding/Less/coffeescript支持—Webstorm入门指南
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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