nodejs JSON - RPC 를 통 해 aria 2 인 터 페 이 스 를 호출 합 니 다.

9978 단어 nodejs
더 읽 기
오늘 은 이전 다운로드 서버 개발 을 계속 합 니 다. 첫 번 째 단 계 는 파일 을 호출 하 는 API 입 니 다. 두 번 째 단 계 는 응용 디 렉 터 리 에 있 는 모든 파일 을 표시 하 는 것 입 니 다. 오늘 의 목 표 는 배경 인 터 페 이 스 를 호출 하여 다운로드 하 는 것 입 니 다.
1. aria 2 설정
여기 서 우리 가 사용 하 는 것 은 aria 2 이 고 aria 2 는 명령 행 에서 실행 되 고 다 중 프로 토 콜, 다 중 소스 다운로드 도구 입 니 다.wget 처럼 파일 을 직접 다운로드 할 수 있 는 것 을 제외 하고 가장 중요 한 기능 은 배경 서 비 스 를 사용 할 수 있 으 며, 시작 후 rpc 인터페이스 에서 작업 을 추가 할 때 까지 기다 리 는 것 입 니 다.
소형 다운로드 서버 를 구축 하 는 글 에서 시작 하 는 방식 은 다음 과 같다.
aria2c --enable-rpc --rpc-listen-all &

명령 으로 설정 을 수정 하고 저장 하기 가 불편 합 니 다. 설정 파일 $HOME /. aria 2 / 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) aria 2 JSON - RPC 인터페이스 및 nodejs 모듈
JSON - RPC 인터페이스 websocket
2) 패키지 웹 소켓 클 라 이언 트
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) 웹 소켓 을 호출 하여 다운로드 시작:
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 파일 은 배경 에 있 는 aria 2 인 터 페 이 스 를 호출 하여 다운로드 주 소 를 추가 하고 우리 가 원 하 는 것 을 다운로드 할 수 있 습 니 다.
 
다음으로 전송: http://wenzhixin.net.cn/2013/10/27/nodejs_json_rpc_aria2

좋은 웹페이지 즐겨찾기