Node.js как пользовательский (потоковый) обработчик загрузки для Django - PullRequest
2 голосов
/ 08 марта 2010

Я хочу создать приложение для загрузки, используя Django. Один из способов сделать это - использовать модуль загрузки nginx (неблокирующий), но у него есть свои проблемы. Предполагается, что Node.js является хорошим кандидатом для такого типа приложений. Но как сделать так, чтобы node.js действовал как upload_handler () для Django ? Я не уверен, где искать примеры?

Ответы [ 2 ]

2 голосов
/ 14 марта 2010

Хорошо, я не специалист по этому вопросу или что-то в этом роде, но, как мне кажется, я понимаю, nginx - это прокси-сервер, который работает перед веб-сервером, обслуживающим ваше приложение django, верно?

Вы можете создать простой сервер node.js, который делает то же самое - прослушивать порт 80, подождать, пока запрос полностью не будет отправлен на сервер, а затем направить его на веб-сервер, который обслуживает приложение Django. Если ваша проблема в том, что потоки веб-серверов используются для длительных загрузок, то я думаю, что это решит эту проблему.

Вот код - чуть выше моей головы

var http = require('http');

var server = http.createServer(function (req, res) {
    var headers = req.headers;
    var url = req.url;
    var method = req.method;
    var body = '';
    req.addListener('data', function(chunk) {
        body += chunk;
    });
    req.addListener('end', function() {
        // at this point the request is completely uploaded (including files)
        // so it can be forwarded to the django webserver

        var dj_client = http.createClient(8000, 'localhost');
        var dj_req = dj_client.request(method, url, headers);
        dj_req.addListener('response', function (dj_res) {
            // here the response have been received from the django server
            // so we can return that to the waiting client
            res.writeHead(dj_res.status, dj_res.headers);

            dj_res.addListener('data', res.write);
            dj_res.addListener('end', res.close);
        });

        // send the request to the django webserver
        dj_req.write(body);
        dj_req.close();
    });
});

server.listen(80);
0 голосов
/ 02 мая 2010

Заставьте node.js записать файл на диск и прокси-сервер для загрузки POST в Django вместе со значением '_node_file', чтобы ваше представление Django знало, где взять файл.

...