有什麼不對$backlog
是如何覆蓋在documentation?
最大的積壓傳入連接將排隊等待處理。如果連接請求到達時隊列已滿,則客戶端可能會收到錯誤,並顯示ECONNREFUSED
,或者如果底層協議支持重新傳輸,則可能會忽略請求,以便重試可能成功。
注意: 傳遞給積壓參數的最大數量很大程度上取決於底層平臺。在Linux上,它被無聲地截斷爲SOMAXCONN
。在win32上,如果通過SOMAXCONN
,負責套接字的基礎服務提供者將把backlog設置爲最大合理值。沒有標準規定來找出這個平臺上的實際積壓值。
或者你可以參考BSD Sockets listen documentation,因爲PHP使用BSD套接字:
表示可以在任一週時間被排隊掛起連接的數量的整數。操作系統通常對此值設置上限。
BSD套接字在歷史上使用單個隊列實現,其大小由backlog參數確定。
當從客戶端收到一個SYN
數據包時,它會發回一個SYN/ACK
數據包並將連接添加到隊列中。當收到相應的ACK
時,連接將其狀態更改爲ESTABLISHED
,並有資格切換到應用程序。
當達到最大待辦事項時,系統將不再發回SYN/ACK
數據包以響應SYN
數據包。通常,TCP實現將簡單地丟棄SYN
數據包(而不是使用RST
數據包進行響應),以便客戶端重試。因此說,「可能收到一個錯誤與ECONNREFUSED
指示」
如果你沒有在你的實現使用backlog
的說法,它只會被自動設置。在Linux上它是,爲listen man page:
如果積壓參數比/proc/sys/net/core/somaxconn
值越大,則靜靜地截斷該值;此文件中的默認值爲128.在2.4.25之前的內核中,此限制是一個硬編碼值,SOMAXCONN
,值爲128.
我不是說錯了這個PHP手冊。爲什麼使用像'0,1,2,3'這樣的積壓值有什麼用處呢? – prasanth
我想我完全覆蓋了我的答案。您可以使用'backlog'來一次限制傳入連接的數量。這不明顯嗎? –