Express.js | http-сервер не запускает выполнение кода сразу после принятия запроса

#node.js #express #nodes

#node.js #экспресс #узлы

Вопрос:

Сервер Expressjs выполняет начальные ~ 2 вызова API в очереди, даже если уже выполнено несколько вызовов API. он не запускает выполнение кода сразу после принятия запроса и не ожидает завершения предыдущего запроса.

  • Такое же поведение наблюдается и в fastify.
  • Почти такое же поведение на обычном http-сервере.

Кто-нибудь может объяснить, почему его вывод выглядит так, как показано ниже?

#Видео с объяснением проблемы

https://www.loom.com/share/876f1bf5a36c44e59582081c3be09eb5

#Code

 const express = require('express');
const app = express();
const port = 3000;

let s = {counter: 1};
app.get('/', async (req, res) => {
    let start = new Date();
    let counterValue = s.counter  ;
    console.log('start '   counterValue);
    await tenSecondsTimeoutWait();

    res.setHeader('Content-Type', 'application/json');
    const results = new Date() - start;
    console.log(`end : ${counterValue} in time: ${results}`);
    res.send({'hello': `world ${counterValue} in time: ${results}ms`});
});


app.get('/get', (req, res) => {
    console.log('express get');
    res.send({'hello': `world from get`});
});

app.listen(port, () => {
    console.log(`Example app listening at http://localhost:${port}`);
});

async function tenSecondsTimeoutWait() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(1);
        }, 10000);
    });
}

  

Я начал выполнять приведенные ниже команды и получать тот же результат.

 node index.js
SET UV_THREADPOOL_SIZE=1024 amp;amp; node --max-old-space-size=6000 --v8-pool-size=10 index.js
  

#Вывод

 Example app listening at http://localhost:3000
start 1
end : 1 in time: 10008
start 2
end : 2 in time: 10010
start 3
start 4
start 5
start 6
start 7
start 8
end : 3 in time: 10003
start 9
end : 4 in time: 10002
start 10
end : 5 in time: 10003
end : 6 in time: 10005
end : 7 in time: 10006
end : 8 in time: 10006
end : 9 in time: 10010
end : 10 in time: 10001
  

Ответ №1:

Проблема в браузере Chrome,

  • Такое поведение характерно только для chrome. Каким-то образом chrome не отправляет запросы на сервер.
  • Когда мы попытаемся с помощью cmd открыть несколько вкладок и нажать запрос с использованием curl, запрос начнет выполняться немедленно, проверьте вывод cmd ниже.
 start 1
start 2
start 3
start 4
start 5
start 6
start 7
end : 1 in time: 10006
start 8
start 9
end : 2 in time: 10011
start 10
end : 3 in time: 10009
start 11
end : 4 in time: 10007
start 12
end : 5 in time: 10016
end : 6 in time: 10008
end : 7 in time: 10005
end : 8 in time: 10005
end : 9 in time: 10002
end : 10 in time: 10003
end : 11 in time: 10001
end : 12 in time: 10004