私は通常行うように一緒に処理された50のsetTimeoutの秒、すべてのタイムアウトを除いて、この要求は、その多くの処理時間がかかることはありませんので
app.get('/', function(req, res) {
console.log('time', MOMENT());
setTimeout(function() {
console.log(data, ' ', MOMENT());
res.send(data);
data = 'changing';
}, 50000);
var data = 'change first';
console.log(data);
});
要求処理をテストするには、次のコードを使用していました。
この後
time moment("2017-05-22T16:47:28.893")
change first
time moment("2017-05-22T16:47:30.981")
change first
time moment("2017-05-22T16:47:33.463")
change first
change first moment("2017-05-22T16:48:18.923")
change first moment("2017-05-22T16:48:20.988")
change first moment("2017-05-22T16:48:23.466")
together-
応答3の要求は、私は私の要求が同期ファイルや時間がかかり、他のいくつかのことを処理するために多くの時間を要し、すなわち、どのような場合には...第二段階に移りました。
app.get('/second', function(req, res) {
console.log(data);
if(req.headers.data === '9') {
res.status(200);
res.send('response from api');
} else {
console.log(MOMENT());
for(i = 0; i<9999999999; i++){}
console.log('Second MOMENT', MOMENT());
res.status(400);
res.send('wrong data');
}
var data = 'second test';
});
私の最初のリクエストがまだ処理中だったので、2番目のリクエストはNodeによって受け入れられませんでした。したがって、私はこのように、すべての非同期機能のために2要求 -
undefined
moment("2017-05-22T17:43:59.159")
Second MOMENT moment("2017-05-22T17:44:40.609")
undefined
moment("2017-05-22T17:44:40.614")
Second MOMENT moment("2017-05-22T17:45:24.643")
の応答次しまった前の要求が非同期のような働きを完了する前に他のリクエスト(FS、mysqlの、または呼び出しAPI)を受け入れないノードとノードに仮想スレッドをtheresの、しかしそれはそれを単一スレッドとして自己保持し、以前のスレッドがすべて完了するまで他の要求を処理しません。
http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/ – Paul