Этот вопрос касается общих концепций, связанных с протоколом tcp/ip, для которых уже есть хорошие ответы на So, но я надеюсь получить некоторое представление об особенностях http/net-библиотек node.js.
Экземпляр http-сервера node позволяет регистрировать обратные вызовы для двух типов событий: события «запрос» и события «подключение». Последний из них наследуется от сетевой библиотеки вместе с полем '_connections', которое подсчитывает количество одновременных подключений, которые в настоящее время имеет сервер.
Теперь мне кажется, что, поскольку http является протоколом без сохранения состояния, должно быть соответствие 1-1 между событиями запроса и соединения, но это не так. Проходя простой сервер «hello-world» в своем отладчике, я увидел, что количество событий запроса превышает количество событий подключения. Я также видел, что даже когда на сервер не поступали вызовы (и процесс не был приостановлен), поле .connections никогда не обнулялось. Почему количество запросов не равно количеству соединений, и почему сервер должен держать соединение открытым после последнего вызова response.end() (когда буфер ответа должен быть очищен и соединения завершены?).
Кроме того, как количество одновременных подключений для http-сервера (который ничего не делает с поддержкой активности) может быть больше 1? Разве запросы в основном не ставятся в очередь на сокете и не обрабатываются один за другим? Я понимаю, что Node асинхронный, но я также думал, что он ведет себя как однопоточный.
Заранее спасибо!