2

Django を使用してアップロード中心のアプリを構築したいと考えています。これを行う 1 つの方法は、nginx のアップロード モジュール (ノンブロッキング) を使用することですが、問題があります。Node.js は、このタイプのアプリケーションに適していると考えられています。しかし、 node.jsを Django の upload_handler()として機能させるにはどうすればよいですか? 例を探す場所がわかりません。

4

2 に答える 2

2

さて、私はこのテーマの専門家ではありませんが、私が理解していると思う方法では、nginx は、django アプリを提供する Web サーバーの前で実行されるプロキシですよね?

同じことを行う単純な node.js サーバーを構築できます。ポート 80 でリッスンし、リクエストがサーバーに完全に送信されるまで待ってから、Django アプリを提供する Web サーバーに転送します。あなたの問題が、ウェブサーバーのスレッドが長時間実行されるアップロードによって使い果たされていることである場合、これでその問題は解決すると思います。

ここにいくつかのコードがあります-私の頭のてっぺんから

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);
于 2010-03-14T01:28:34.020 に答える
0

node.js にファイルをディスクに書き込み、'_node_file' 値とともに Django へのアップロード POST をプロキシして、Django ビューがファイルの取得場所を認識できるようにします。

于 2010-05-02T17:22:00.250 に答える