2011-06-03 104 views
2

根據我自己的經驗,我綁定了1個套接字並將請求分派給其他線程。允許多個套接字在同一端口上偵聽有什麼好處?

但着名的web服務器nginx是bind()目標端口上的多個套接字。

這樣做的好處是什麼?

+0

呃?如果你綁定到不同的IP /接口,你應該只能這樣做。你可以做的是在幾個進程/線程上接受(),內核會選擇一個,可能只會喚醒那一個(避免雷鳴般的牛羣問題)。 – ninjalj 2011-06-03 21:37:27

+0

@ninjalj,nginx並非如此,它將多個套接字綁定到相同的IP /接口。 – 2011-06-04 00:08:59

+0

通常不可能同時將多個套接字綁定到相同的IP /端口對。 'bind()'會失敗並出錯。無論如何,即使可以這樣做也毫無益處。 – 2011-06-04 07:48:31

回答

1

翻看nginx源代碼,我沒有看到這種可能性。從手冊頁ip(7)

引用當一個進程想要接收 新傳入的數據包或連接, 應該使用綁定(2)將套接字綁定到本地 接口地址。只有 一個IP 套接字可以綁定到任何給定的本地(地址,端口)對。

所以,我認爲還有其他事情正在進行。你能提一下你如何確定nginx是這樣做的嗎?

相關問題