Это меня озадачило ... Этот следующий тест показывает, что запросы принимаются асинхронно, асинхронно реагирует, но все запросы сначала принимаются, а затем откликаются на ... Учитывая следующие 3 файла:Является ли маршрутизация express.router() синхронным?
package. JSON
{
"name": "express-router-sync-test",
"version": "1.0.0",
"description": "Testing if express router has sync aspect",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"body-parser": "1.16.0",
"express": "4.14.1",
"request": "2.79.0"
}
}
server.js
const express = require('express');
const bodyParser = require('body-parser');
const router = express.Router();
const request = require('request');
// Create our Express application
let app = express();
let port = 1111;
// body parser
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(router);
// Start the server
app.listen(port);
console.log('Server listening on port ' + port + '.');
router.get('/', _get);
router.post('/test', _test);
function _test(req, res) {
console.log('starting to process request # ', req.body.requestNumber);
request({
method: 'GET',
url: 'http://localhost:1111'
}, (err, response, body) => {
console.log('process # ' + req.body.requestNumber + ' has ended');
});
}
function _get(req, res) {
res.json({ success: true });
}
test.js
const request = require('request');
let i;
let len = 500;
let options = {
method: 'POST',
url: 'http://localhost:1111/test'
}
for (i = 0; i < len; i++) {
options.form = { requestNumber: i + 1 };
request(options, (err, response, body) => {
if (err) console.log(err);
if (response) console.log(body)
});
}
Учитывая реж структуру:
app/
--package.json
--server.js
--test.js
Выполните следующие действия, чтобы воспроизвести тест:
- в терминале, перейдите к приложению каталог и запустить
npm install
- запустить
node server.js
- открыть другой терминал, перейти на адрес приложения и запустить
node test.js
Если вы посмотрите на вывод сервера server.js, вы заметите, что все «начальные процессы» сгруппированы вместе, но в асинхронном порядке. Вы также заметите, что все «завершенные процессом» записи группируются вместе, но также в асинхронном порядке.
теперь я задать два вопроса:
- Почему не ответы откладывается до тех пор, после того, как все запросы были получены?
- Это происходит, потому что я наводняю себя запросами?
Любая информация была бы принята с благодарностью.
EDIT: вот пример журнала этого тестового прогона с 50 запросами вместо 500. Вы заметите, что на запрос не отправляется запрос до тех пор, пока все запросы не будут получены. Чем больше запросов вы отправляете, тем дольше вы ожидаете первого ответа.
starting to process request # 1
starting to process request # 2
starting to process request # 3
starting to process request # 4
starting to process request # 5
starting to process request # 6
starting to process request # 9
starting to process request # 8
starting to process request # 7
starting to process request # 10
starting to process request # 12
starting to process request # 11
starting to process request # 13
starting to process request # 17
starting to process request # 16
starting to process request # 15
starting to process request # 14
starting to process request # 21
starting to process request # 19
starting to process request # 20
starting to process request # 18
starting to process request # 22
starting to process request # 23
starting to process request # 25
starting to process request # 24
starting to process request # 27
starting to process request # 28
starting to process request # 26
starting to process request # 32
starting to process request # 31
starting to process request # 30
starting to process request # 29
starting to process request # 36
starting to process request # 35
starting to process request # 33
starting to process request # 34
starting to process request # 40
starting to process request # 38
starting to process request # 39
starting to process request # 37
starting to process request # 44
starting to process request # 42
starting to process request # 43
starting to process request # 41
starting to process request # 45
starting to process request # 46
starting to process request # 47
starting to process request # 49
starting to process request # 48
starting to process request # 50
process # 1 has ended
process # 2 has ended
process # 4 has ended
process # 3 has ended
process # 5 has ended
process # 6 has ended
process # 9 has ended
process # 8 has ended
process # 11 has ended
process # 12 has ended
process # 10 has ended
process # 7 has ended
process # 13 has ended
process # 17 has ended
process # 15 has ended
process # 16 has ended
process # 14 has ended
process # 21 has ended
process # 22 has ended
process # 18 has ended
process # 20 has ended
process # 19 has ended
process # 27 has ended
process # 24 has ended
process # 25 has ended
process # 23 has ended
process # 31 has ended
process # 32 has ended
process # 26 has ended
process # 28 has ended
process # 30 has ended
process # 29 has ended
process # 34 has ended
process # 35 has ended
process # 33 has ended
process # 36 has ended
process # 40 has ended
process # 38 has ended
process # 39 has ended
process # 37 has ended
process # 44 has ended
process # 42 has ended
process # 46 has ended
process # 45 has ended
process # 41 has ended
process # 43 has ended
process # 47 has ended
process # 50 has ended
process # 48 has ended
process # 49 has ended
Пожалуйста, покажите вывод консоли, который вы получили, и ожидаемый результат, чтобы мы могли понять, что вас удивляет. – jfriend00
Вопрос кажется неопределенным. –