Я думаю запрос Нет два HTTP не может прийти к серверу в то же самое время, все запросы приходят через трубу, так что они будут в очереди.
Эта часть в основном правильная. Входящие соединения входят в очередь событий, и один из них должен быть помещен в очередь.
Что делать, если два запроса поступают на два сервера в одно и то же время, как сервер справится с этой ситуацией?
Поскольку сервер прослушивает входящие TCP-соединения в одном сокете в одном процессе, не может быть двух входящих соединений в одно и то же время. Одна из них будет обрабатываться базовой операционной системой немного раньше другой. Подумайте об этом так. Входящее соединение представляет собой набор пакетов по сетевому соединению. Одно из входящих соединений будет иметь свои пакеты перед другим.
Даже если у вас было несколько сетевых карт и несколько сетевых ссылок, так что два входящих соединения могли буквально прибыть на сервер в тот же самый момент, очередь node.js будет охраняться для параллелизма чем-то вроде мьютекса и одной из входящие соединения будут захватывать мьютекс перед другим и помещаться в очередь событий перед другим.
Тот, который обрабатывается ОС, сначала будет помещен в очередь событий node.js перед другим. Когда узел.js доступен для обработки следующего элемента в очереди событий, то, какой бы входящий запрос был первым в очереди событий, сначала начнется обработка.
Так как выполнение JS-узла node.js однопоточно, обработка этого запроса будет завершена с его синхронным кодом. Если он имеет операцию async, тогда он начнет эту операцию async и вернется. Затем будет разрешено обрабатывать следующий элемент в очереди событий, и код для второго запроса начнет работать. Он будет работать синхронно с завершением. Как и в случае с первым запросом, если он имеет операцию async, тогда он начнет эту операцию async и вернется.
В этот момент после того, как оба запроса запустили свои асинхронные операции, а затем вернулись, то это просто до очереди событий. Когда закончится одна из этих операций async, она отправит другое событие в очередь событий, и когда единственный поток node.js будет бесплатным, он снова обработает следующий элемент в очереди событий. Если оба запроса имеют множество асинхронных операций, их прогресс может чередоваться, и оба могут быть «в полете» одновременно с тем, как они запускают асинхронную операцию, а затем возвращаются до тех пор, пока эта асинхронная операция не завершится, когда их обработка снова забирается, когда node.js бесплатно обработать это следующее событие.
Отметка запроса содержится в его заголовке, и они могут быть толкнул в цикл обработки событий в зависимости от их временной метки в заголовке.
Эта часть не совсем прав. Входящие события того же типа добавляются в очередь по мере их поступления. Первые, чтобы прибыть, входят в очередь сначала - нет никакого шага, который исследует некоторую временную метку.
Можно ли одновременно подключать сервер к нескольким сокетам?? Если это возможно, может быть несколько запросов одновременно? –
@AkhileshKumar - Я не изучил все возможности с несколькими сетевыми картами, но вы можете иметь несколько слушателей, каждый на другой сетевой карте, но все в том же процессе node.js. – jfriend00