Может ли сервер Node.js принимать входящие запросы, пока очередь событий заблокирована? - PullRequest
6 голосов
/ 22 марта 2012

Итак, я только начинаю погружаться в Node, и я понимаю, что ввод / вывод неблокирует и что цикл событий блокируется, но меня интересует следующее:

Если у вас есть код, который блокирует очередь событий, сможет ли сервер по-прежнему размещать входящие запросы в конце очереди, или все они будут просто блокированы по тайм-ауту / отказов?

Ответы [ 2 ]

9 голосов
/ 22 марта 2012

Да.Сервер все еще может ставить в очередь запросы.Для демонстрации я создал следующий файл, который блокируется на 10 секунд, запустил его и свернул сервер на другом терминале.

require('http').createServer(function(req, res) {
  console.log('got a request!');
  res.end('hello world!\n');
}).listen(3000);

var t = Date.now();
console.log('blocking..');
while(t + 10000 > Date.now());
console.log('not blocking anymore');

Результат его запуска

blocking..
not blocking anymore
got a request!
4 голосов
/ 08 января 2013

Это не имеет ничего общего с узлом, или, по крайней мере, это обсуждение пока не приводит никаких доказательств поведения узла.

Стек TCP сам принимает соединение в свою очередь безпомощь от программы, которая использует принимающий сокет.Если эта очередь заполняется, дальнейшие запросы направляются на ожидание, пока в очереди TCP-соединения не будет места.Такие «неприемлемые» соединения не отказов, хотя они могут истечь время ожидания, если вещи действительно задерживаются.

Суть, однако, в том, что пример ответа, использующий curl, не доказывает ничего, кроме базового поведенияСтек TCP, но это, вероятно, не имеет значения, потому что первоначальная задача автора заключалась в том, что соединения могут отскочить.Это произойдет только в том случае, если ваш сервер настолько перегружен (или, возможно, плохо написан), что он фактически перегружен, и выгрузка некоторых запросов является наилучшей возможностью, по крайней мере, предоставить некоторые услуги некоторым пользователям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...