Od kilku dni szukałem działającego rozwiązania błędu
Error: EMFILE, too many open files
Wydaje się, że wiele osób ma ten sam problem. Zwykła odpowiedź polega na zwiększeniu liczby deskryptorów plików. Więc spróbowałem tego:
sysctl -w kern.maxfiles=20480
,
Wartość domyślna to 10240. Moim zdaniem jest to trochę dziwne, ponieważ liczba plików, które obsługuję w katalogu, jest poniżej 10240. Co dziwniejsze, nadal otrzymuję ten sam błąd po zwiększeniu liczby deskryptorów plików .
Drugie Pytanie:
Po kilku wyszukiwaniach znalazłem obejście problemu „zbyt wielu otwartych plików”:
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);
Niestety nadal otrzymuję ten sam błąd. Co jest nie tak z tym kodem?
Ostatnie pytanie (jestem nowy w javascript i node): jestem w trakcie tworzenia aplikacji internetowej z dużą ilością zapytań dla około 5000 użytkowników dziennie. Mam wieloletnie doświadczenie w programowaniu w innych językach, takich jak Python i Java. więc początkowo myślałem, że stworzę tę aplikację za pomocą django lub frameworka play. Potem odkryłem node'a i muszę powiedzieć, że pomysł nieblokującego modelu I / O jest naprawdę fajny, uwodzicielski i przede wszystkim bardzo szybki!
Ale jakich problemów należy się spodziewać w przypadku węzła? Czy jest to sprawdzony serwer WWW? Jakie masz doświadczenia?