2010-10-07 30 views
0

在設計監聽一個端口的服務器應用程序時應考慮哪些性能問題?我知道成千上萬的客戶端可以通過單個端口連接到服務器,但是服務器應用程序接受單個端口上的所有傳入請求會對性能產生負面影響?同一端口上大量連接的性能考慮因素

我的理解是否正確:這個模型(服務器監聽一個處理傳入連接的端口,然後響應客戶端連接建立時創建的出站連接)是數據庫/ web服務器等的工作方式?

問候, 布賴恩

回答

0

它不一樣,如果服務器偵聽一個或一組端口上的關係。服務器仍然必須爲其接受的每個客戶端建立完整的套接字連接。操作系統仍然必須將入站數據包路由到正確的套接字端點,並且套接字由兩個端點的IP /端口對的組合唯一標識,因此如果服務器端點使用不同端口,則不會出現性能問題。

任何性能問題將以服務器的代碼處理這些套接字連接的方式出現。如果它只監聽一個端口,並且在一個線程中使用簡單的accept()循環接受該端口上的客戶端,則它可以接受客戶端的速率受該循環的限制。通常情況下,服務器會爲每個接受的客戶端產生工作線程,如果不使用線程池,自身會產生性能開銷。如果服務器需要同時處理大量客戶端,那麼它應該使用重疊的I/O或I/O完成端口來更有效地處理連接。