0
セットアップした小さなサンドボックスでサーバーをスケールする方法を学習しています。ただ、nodejs pm2を使用してサーバーをスケーリングするときのポートの動作
'use strict';
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const instanceId = parseInt(Math.random() * 1000);
//Allow all requests from all domains & localhost
app.all('/*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, Accept");
res.header("Access-Control-Allow-Methods", "POST, GET");
next();
});
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.get('/', function(req, res) {
console.log(`[${new Date()}] ${req.method} ${req.originalUrl} from ${req.ip} at ${instanceId}`);
res.send(`received at ${Date.now()} from ${instanceId}`);
});
app.listen(6069);
何も狂った日付と要求がで受信されたインスタンスを吐き出す:ここでは非常に簡単なコードです。 nodejsサーバーをスケーリングする
PM2ドキュメントを実行するために私に助言:
完璧にうまく働いたpm2 start server.js -i 5
。ここでは、npmモジュールのloadtestを使用して負荷テストを行った場合の出力例を示します。
server-0 [Sun Aug 07 2016 00:13:53 GMT-0400 (EDT)] GET/from ::ffff:127.0.0.1 at 847
server-1 [Sun Aug 07 2016 00:13:53 GMT-0400 (EDT)] GET/from ::ffff:127.0.0.1 at 261
server-3 [Sun Aug 07 2016 00:13:53 GMT-0400 (EDT)] GET/from ::ffff:127.0.0.1 at 328
server-2 [Sun Aug 07 2016 00:13:53 GMT-0400 (EDT)] GET/from ::ffff:127.0.0.1 at 163
server-4 [Sun Aug 07 2016 00:13:53 GMT-0400 (EDT)] GET/from ::ffff:127.0.0.1 at 351
server-0 [Sun Aug 07 2016 00:13:53 GMT-0400 (EDT)] GET/from ::ffff:127.0.0.1 at 847
server-3 [Sun Aug 07 2016 00:13:53 GMT-0400 (EDT)] GET/from ::ffff:127.0.0.1 at 328
server-1 [Sun Aug 07 2016 00:13:53 GMT-0400 (EDT)] GET/from ::ffff:127.0.0.1 at 261
server-2 [Sun Aug 07 2016 00:13:53 GMT-0400 (EDT)] GET/from ::ffff:127.0.0.1 at 163
server-4 [Sun Aug 07 2016 00:13:53 GMT-0400 (EDT)] GET/from ::ffff:127.0.0.1 at 351
server-0 [Sun Aug 07 2016 00:13:53 GMT-0400 (EDT)] GET/from ::ffff:127.0.0.1 at 847
server-3 [Sun Aug 07 2016 00:13:53 GMT-0400 (EDT)] GET/from ::ffff:127.0.0.1 at 328
ここに私の質問があります。ポート6069が使用されているというエラーがノードで発生しなかったのはなぜですか?複数のサーバーがポートを使用しようとしていますが、不平はありません。どうして?
本当に 'app.listen(6069)'では何が起こっていますか?なぜポート衝突がないのですか? – helsont
ノードのクラスタモジュールを使用して複数の作業者にフォークするためです。一般に、CPUが 'require( 'os')で利用できるよりも多くの労働者を使うべきではないことに注意してください。 Node.jsクラスターの詳細はこちら:https://nodejs.org/api/cluster.html – ldg
ありがとうございました。私はそこにあなたのコメントの行に沿って何かを探していました。この質問は、http://stackoverflow.com/questions/1568786/fork-before-or-after-accepting-connectionsを明確にするのにも役立ちました。基本的に、特定のポートで 'accept'の前に' fork'を呼び出すのはまったく問題ありません。 – helsont