บางวันฉันได้ค้นหาวิธีการแก้ไขข้อผิดพลาด
Error: EMFILE, too many open files
ดูเหมือนว่าหลายคนมีปัญหาเดียวกัน คำตอบปกติเกี่ยวข้องกับการเพิ่มจำนวนของตัวอธิบายไฟล์ ดังนั้นฉันได้ลอง:
sysctl -w kern.maxfiles=20480
,
ค่าเริ่มต้นคือ 10240 นี่เป็นสิ่งที่แปลกในสายตาของฉันเพราะจำนวนไฟล์ที่ฉันจัดการในไดเรกทอรีอยู่ภายใต้ 10240 แม้แต่คนแปลกหน้าฉันยังคงได้รับข้อผิดพลาดเดียวกันหลังจากฉันเพิ่มจำนวนตัวอธิบายไฟล์ .
คำถามที่สอง:
หลังจากการค้นหาจำนวนหนึ่งฉันพบวิธีแก้ไขปัญหา "ไฟล์เปิดมากเกินไป":
var requestBatches = {};
function batchingReadFile(filename, callback) {
// First check to see if there is already a batch
if (requestBatches.hasOwnProperty(filename)) {
requestBatches[filename].push(callback);
return;
}
// Otherwise start a new one and make a real request
var batch = requestBatches[filename] = [callback];
FS.readFile(filename, onRealRead);
// Flush out the batch on complete
function onRealRead() {
delete requestBatches[filename];
for (var i = 0, l = batch.length; i < l; i++) {
batch[i].apply(null, arguments);
}
}
}
function printFile(file){
console.log(file);
}
dir = "/Users/xaver/Downloads/xaver/xxx/xxx/"
var files = fs.readdirSync(dir);
for (i in files){
filename = dir + files[i];
console.log(filename);
batchingReadFile(filename, printFile);
น่าเสียดายที่ฉันยังคงได้รับข้อผิดพลาดเดียวกัน เกิดอะไรขึ้นกับรหัสนี้?
หนึ่งคำถามสุดท้าย (ฉันใหม่สำหรับ javascript และ node) ฉันอยู่ในขั้นตอนการพัฒนาเว็บแอปพลิเคชั่นพร้อมคำขอจำนวนมากสำหรับผู้ใช้ประมาณ 5,000 คนต่อวัน ฉันมีประสบการณ์หลายปีในการเขียนโปรแกรมกับภาษาอื่นเช่น python และ java ตอนแรกฉันคิดว่าจะพัฒนาแอพพลิเคชั่นนี้ด้วย django หรือ play framework จากนั้นฉันก็ค้นพบโหนดและฉันต้องบอกว่าความคิดของโมเดล I / O ที่ไม่บล็อกนั้นดีมากมีเสน่ห์และส่วนใหญ่ทั้งหมดนั้นเร็วมาก!
แต่ปัญหาแบบไหนที่ฉันควรคาดหวังจากโหนด? มันเป็นเว็บเซิร์ฟเวอร์ที่ได้รับการพิสูจน์แล้วหรือไม่? คุณมีประสบการณ์อย่างไร