2013-12-08 87 views
0

超過5名客戶端的請求。如果我們綁定的服務器套接字是這樣的:產卵套接字

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
server.bind((host,port)) 
server.listen(5) 

,並使用像select()方法和循環一遍又一遍每個客戶端連接,直到客戶端關閉它來交換消息而循環(這裏爲)同時運行,我們可以交換服務器 - 客戶端消息或客戶端 - 客戶端交換併發。我們可以嗎?

但我讀過的問題是,服務器無法排隊超過5個客戶端來逐一處理;

實際運行多個此類服務器實例的方法有哪些,前提是多個此類服務器進程開始監聽,如果排隊等待的客戶端達到5級?

回答

1

您關心的5個限制是偵聽器積壓隊列的大小。這是系統將暫停多少連接,直到它開始拒絕新的連接。當你在該隊列上釋放一個連接空間時,你可以使用accept。所以只要您及時接受您的連接,在正常負載條件下這不是真正的問題。 (順便提一下,在Linux上,默認的最大進程數是128.)

+0

以下線程我很好,128。不知道。謝謝澄清! – user2290820

2

當您收到一個連接時,您可以生成一個線程/進程來處理該連接。

在主線程回去聽另一個連接

5位是一個保存列表的長度。

到總機接線員

+0

我不明白。當服務器爲這個'client'創建一個客戶端套接字時,你的意思是寫這個監聽器編號減1? (5下降到4?),即使客戶端套接字是積極參與? – user2290820

+1

當有人試圖連接到你的服務器時,計數器從5遞減到4.當你接受創建「客戶端套接字」的連接時,計數器重新遞增到5. – smeso

1

類似也許你誤解積壓參數的功能。 5的限制僅適用於尚未被接受的連接。

+0

我剛纔要求澄清評論中的懷疑部分在 – user2290820