這個問題涉及tcp/ip協議的一般概念,對此已經有很好的答案,但我希望能夠深入瞭解一些node.js http/net庫的特殊性。Node.js HTTP/NET - 連接和請求之間的區別
節點http服務器實例允許爲兩種類型的事件,'請求'事件和'連接'事件註冊回調。後者是從網絡庫繼承而來的,同時還有一個字段'_connections',用於統計服務器當前擁有的併發連接數。
現在,在我看來,由於http是一個無狀態協議,所以請求和連接事件之間應該有一個1-1對應關係 - 但事實並非如此。當在我的調試器中通過一個簡單的「hello-world」服務器時,我發現請求事件的數量超過了連接事件的數量。我也看到,即使沒有對服務器進行調用(並且進程沒有暫停),.connections字段也不會被清零。爲什麼請求數不等於連接數,以及爲什麼服務器在最後一次調用response.end()(當應答緩衝區應該被刷新並且連接結束?)之後保持連接處於打開狀態?
另外,http服務器的併發連接數(與keep-alive沒有任何關係)的數量怎麼會高於1?請求基本上不在socket上排隊並逐個處理?我明白Node是異步的,但我也認爲它是以單線程方式運行的。
在此先感謝!
你確定保持活着沒有啓用?它在Node.js中是默認的。另請記住,雖然請求是逐個處理的,但異步事件可能會交織在一起,這意味着完整的請求響應循環可能不是100%同步的。 –