express-15生産に関する問題
5861 ワード
実行環境
app.set('env', 'production')
を呼び出して実行環境を指定することができるが、これは推奨されない.// `app.get('env')` :
http.createServer(app).listen(app.get('port'), function(){
console.log( 'Express started in ' + app.get('env') +
' mode on http://localhost:' + app.get('port') +
'; press Ctrl-C to terminate.' );
});
// :
$ export NODE_ENV=production
$ node meadowlark.js
$ NODE_ENV=production node meadowlark.js
環境固有の構成
ログ#ログ#
Morgan
npm install --save morgan
が使用されます.express-logger
npm install --save express-logger
を使用してログサイクルをサポートします(24時間ごとにコピーし、新しいログを開始し、ログファイルが無制限に増加することを防止します).// :
switch(app.get('env')){
case 'development':
// 、
app.use(require('morgan')('dev'));
break;
case 'production':
// 'express-logger'
app.use(require('express-logger')({
path: __dirname + '/log/requests.log'
}));
break;
}
ログのループ機能を実際に見たい場合は、node_を編集できます.modules/express-logger/logger.jsは、24時間から10秒に変更するなど、変数defaultIntervalを変更します(node_modulesのパッケージを変更するのは実験または学習目的のみです).
Webサイトの拡張
外部に拡張するように設計されたWebサイトを構築する際に、最も重要なのは永続化です。
アプリケーションクラスタで拡張
function startServer() {
app.listen(process.env.PORT || 3000, function(){
console.log( 'Express started in ' + app.get('env') +
' mode on http://localhost:' + app.get('port') +
'; press Ctrl-C to terminate.' );
});
};
if(require.main === module){
// ;
startServer();
} else {
// "require" :
//
module.exports = startServer;
}
// ,meadowlark.js (node meadowlark.js), require 。
var cluster = require('cluster');
function startWorker() {
var worker = cluster.fork();
console.log('CLUSTER: Worker %d started', worker.id);
}
if(cluster.isMaster){
require('os').cpus().forEach(function(){
startWorker();
});
// 。 , ,
// exit
cluster.on('disconnect', function(worker){
console.log('CLUSTER: Worker %d disconnected from the cluster.',
worker.id);
});
// ( ) ,
cluster.on('exit', function(worker, code, signal){
console.log('CLUSTER: Worker %d died with exit code %d (%s)',
worker.id, code, signal);
startWorker();
});
} else {
// , meadowlark.js
require('./meadowlark.js')();
}
マルチコアシステムにいると仮定すると、いくつかの作業スレッドが起動していることがわかります.異なるワークスレッドが異なるリクエストを処理する証拠を見たい場合は、ルーティング前に次のミドルウェアを追加します.
app.use(function(req,res,next){
var cluster = require('cluster');
if(cluster.isWorker) console.log('Worker %d received request',
cluster.worker.id);
});