2014-02-19 66 views
0
request.post({url: 'http://service.com/upload', form: {data: fs.createReadStream('T:/a.png')}}); 

運行此每一秒〜10分鐘後,我得到這個錯誤Error: EMFILE(打開的文件太多)請求的NodeJS FILESTREAM EMFILE錯誤

爲什麼?我應該手動關閉這些流?爲什麼不會request這樣做,但如果是這樣,我該如何關閉它們?

編輯:我不是做了很多異步調用的,只有1個要求是同時啓動。

編輯:沒有流過被關閉,它的錯誤確切後,我創建2046流。他們爲什麼不被關閉?

回答

1

看,這取決於你正在建造什麼樣的服務。

例如,如果您正在執行多次異步(如並行數千次),Node.JS會拋出該錯誤。

嘗試調試應用程序是這樣的(檢查開流的數量)。

var fs = require("fs"); 

var streams = 0; 
var i; 

try { 
    for (i=0;i<10000;i++) 
    { 
    streams++; 
    fs.createReadStream('./file.png').once('end',function() { streams--; }); 
    } 
} catch (e) { 
    console.log(streams); 
} 
+0

我沒有做很多的異步調用,一次只有一個請求處於活動狀態。感謝您的調試代碼,這應該有所幫助,我會盡可能檢查它。 –

+0

沒有流被關閉,它在我創建2046個流之後完全錯誤。爲什麼他們不被'request'關閉? –

+0

ServerResponse的流由Node.JS'自動'關閉。 你的代碼的問題(我認爲)是你打開文件流,而不是在任何地方關閉它們。嘗試監聽socket.on('close',function(){})並關閉打開的文件流。 –