To pytanie dotyczy ogólnych pojęć związanych z protokołem tcp/ip, dla których istnieją już dobre odpowiedzi na temat So, ale mam nadzieję uzyskać wgląd w szczególne cechy bibliotek http/net node.js.Node.js HTTP/NET - różnica między połączeniem a żądaniem
Węzeł instancji serwera HTTP umożliwia rejestrowanie wywołań zwrotnych dla dwóch typów zdarzeń, zdarzenia "żądanie" i zdarzenia "połączenie". Późniejsza z nich jest dziedziczona z biblioteki sieciowej wraz z polem "_connections", które zlicza liczbę równoczesnych połączeń, jakie aktualnie posiada serwer.
Teraz wydaje mi się, że ponieważ http jest protokołem bezstanowym, powinno być 1-1 do zgodności między zdarzeniami i zdarzeniami połączenia - ale tak nie jest. Podczas przechodzenia przez prosty serwer "helo-world" w debugerze zobaczyłem, że liczba zdarzeń żądań przewyższa liczbę zdarzeń związanych z połączeniem. Zobaczyłem również, że nawet jeśli nie było żadnych połączeń z serwerem (a proces nie został wstrzymany), pole .connections nigdy nie wyzeruje się. Dlaczego liczba żądań nie byłaby równa liczbie połączeń i dlaczego serwer utrzymywałby połączenie otwarte również po ostatnim wywołaniu funkcji response.end() (kiedy bufor odpowiedzi powinien zostać przepłukany, a połączenia zakończone?).
Ponadto, w jaki sposób liczba równoczesnych połączeń dla serwera http (który nie robi nic z utrzymaniem aktywności) nigdy nie będzie większa niż 1? Czy żądania nie są po prostu umieszczane w kolejce na gnieździe i przetwarzane jeden po drugim? Rozumiem, że Węzeł jest asynchroniczny, ale pomyślałem także, że zachowuje się w sposób jedno wątkowy.
Z góry dziękuję!
Czy jesteś pewien, że funkcja keep-alive nie jest włączona? Jest domyślnie w Node.js. Pamiętaj również, że podczas przetwarzania żądań jeden po drugim zdarzenia asynchroniczne mogą być przeplatane, co oznacza, że pełny cykl żądanie-odpowiedź może nie być w 100% synchroniczny. –