2014-10-17 104 views
0

多個進程可能在同一個套接字上偵聽?在同一套接字上偵聽多個進程

例如,我有5個客戶端,一個作爲服務器的進程在套接字上寫,所有5個客戶端接收相同的消息。

+0

我認爲[這個答案] [1]應該涵蓋你的大部分問題。 [1]:http://stackoverflow.com/a/670897/2346527 – 2014-10-17 12:48:38

回答

1

是的,它是非常可能的多個進程使用fork()偵聽相同的端口。

事實上,當需要接收來自大量客戶端的消息時,大多數Web服務器都使用它來提高性能。

只需創建監聽程序&即可分叉進程。現在所有進程都將在同一個端口上進行偵聽。現在,他們如何將傳入的請求彼此分開完全取決於操作系統,就像在Solaris中一樣,請求按循環方式在進程間分配。

但是對於您的場景,您可以使用套接字複用(select())來獲得所需的結果。

+0

要知道一個事實,即'接受()'可能會失敗! – 2014-10-19 17:42:31

+0

何時以及如何接受可以失敗的朋友.....我已經使用了他們多次。接受我從未失敗。 Yup select可以超時但這不是問題。 – Khanjarrr 2014-10-19 18:39:19

+1

從技術上講,read-ready通知會同時到達兩個進程,但只有一個套接字會被accept()編輯,讓另一個套接字得到一個錯誤代碼「EAGAIN」。 該評論更上面作爲OP的說明:) – 2014-10-19 19:32:45

相關問題