私はデーモン (具体的には Heroku のワーカー プロセス) を設計しており、コードは RAM の使用量に徐々に蓄積されています。少量 (100kb/10 秒) ですが、このプロセスを長期間使用するには、RAM の使用量を一定に保つことが最善であることを知っています。私は長時間実行するように設計されたプロセスを作成するのは初めてで、Node と Javascript でアプリケーションを開発するのはまだかなり新しいです。ここに私のコードのほとんどがあります:
////////////////
// Queue Loop //
////////////////
var worker = (function() {
var buffer = "";
var couchdb = http.get({
auth: db_user + ":" + db_pass,
host: db_host,
path: '/queue/_all_docs?include_docs=true',
port: db_port
}, function( response ) {
response.setEncoding('utf8');
response.on("data", function( data ) {
buffer += data;
});
response.on("end", function() {
var queue = JSON.parse(buffer);
if ( !queue.error ) {
buffer = "";
couchdb = http.get({
auth: db_user + ":" + db_pass,
host: db_host,
path: '/flights/_all_docs?include_docs=true',
port: db_port
}, function( response ) {
response.setEncoding('utf8');
response.on("data", function(data) {
buffer += data;
});
response.on("end", function() {
var flights = JSON.parse(buffer);
if ( !flights.error ) {
for ( row in queue.rows ) {
console.log(queue.rows[row].doc.flight);
}
for ( row in flights.rows ) {
console.log(flights.rows[row].doc.program);
}
setTimeout( worker, 10000 );
} else {
// db error
}
});
}).on("error", function() {
setTimeout( worker, 10000 );
});
} else {
// db error
}
});
}).on("error", function() {
console.error("CouchDB is currently not available.");
setTimeout( worker, 10000 );
});
});
///////////////
// Run Queue //
///////////////
(function() {
worker();
})();
それで、このようなプログラムを同じ量のRAMで常に実行し続けるための最良の方法は何ですか? Heroku でワーカー プロセスとして機能するのに十分なパフォーマンスを維持するには、他にどのような設計上の考慮事項が不可欠ですか?
ああ、それが何をするかというと、CouchDB インスタンスからいくつかのエントリを取り出し、それらのエントリに基づいて予測を実行します。