2010-03-08 62 views

回答

2

好吧,我不喜歡的主題或任何方面的專家,但我想我的理解是,nginx的是,在提供您的Django應用程序的網絡服務器的前端運行一個代理,對不對?

您可以構建一個相同的簡單node.js服務器 - 在端口80上偵聽,等到請求完全發送到服務器,然後將其轉發到爲Django應用程序提供服務的Web服務器。如果你的問題是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); 
+0

好像你在記憶中緩衝整個事物。這不是流式傳輸。我並不是那麼想進入Django,但它似乎會接受大塊的下載。 – 2010-04-02 07:36:54

+0

老兄!那是f $&*(#awsome ...... :) – 2010-04-12 01:07:22

+0

@Kuroki - 是的,但是我讀了原文,好像那是關鍵。爲了避免在上傳期間停止web服務器線程,這是避免直接流到django應用程序,而是用node.js緩衝它。 – AHM 2010-04-23 13:23:00

0

讓node.js的文件寫入到磁盤和代理上載POST所以你的Django視圖知道要連同「_node_file」值的Django在哪裏獲取文件。