2011-07-09 16 views
3

私のシステムのulimitは1024です。私は同じエラーに関して多くの投稿に出くわしましたが、具体的な答えはありません。私はまた、これがnode/node-mysqlの問題で、私のコードと関係ないかどうかを知りたいと思っています。私はここに私のコードの抜粋を掲載します:Node.js node-mysqlエラー:EMFILE、開いているファイルが多すぎます

exports.fn1 = function(req,res,host,user,password,database){ 
     var client = connectDB.connectDatabase(host,user,password,database); 
       fn2(); 

    function fn2() { 
       client.query(
         'select statement', args, 
         function selectCb(error, result, fields) { 
            if (error) { 
              console.log('ERROR'); 
                client.end(); 
                return; 
            } 
            
            if(not timeout) { 
             setTimeout(function(){ 
                 
                 fn2(); 
                },5000); 
            } 
            
          else { 
           res.writeHead(200, {'Content-Type': 'text/plain'}); 
        res.write(somedata); 
        res.end();  
        client.end(); 
       } 


     }); 
     } 
    } 
}; 

のconnectDBは、DB接続が

var Client = require('mysql').Client;  

exports.connectDatabase = function(host,user,password,database) { 
    var client = new Client(); //Database connection object 
    //Credentials for DB connection 
    client.host = host;  
    client.user = user; 
    client.password = password; 
    client.database = database; 

    client.connect(function(error, results) { 
       if(error) { 
         console.log('Connection Error:'); 
         return; 
       } 
    }); 
    return client; 
} 

私はここのNode.jsと間違って何かをやっているん私が書いたモジュールであるか、それはドライバーです/node.jsの問題?助けてくれてありがとう!

答えて

2

私はあなたがもっと閉鎖を使うべきだと思います。 fn2への参照は名前付きオブジェクトを使用しているため、スコープから外れることはありません。クロージャによる同じコードへの参照は、匿名のレイヤーを引き起こします。これにより、参照が正常に終了し、ガベージコレクションが行われます。

0

私もこの問題に直面しました。非同期で処理する必要があり、クロージャを使用して解決する必要があります。

node.js asychronous issue?

関連する問題