2010-02-28 47 views

回答

26

這部分取決於您的操作系統。

然而對特定端口沒有限制。然而,併發連接數量有限制,通常受內核支持的文件描述符數量(例如2048)的限制。

需要記住的是,TCP連接是唯一的,並且連接是一對端點(本地和遠程IP地址和端口),因此如果1000個連接連接到服務器上的同一端口,則無關緊要因爲連接都是獨一無二的,因爲另一端是不同的。

另一個需要注意的限制是機器只能製造大約64K的出站連接或連接的內核限制,以較低者爲準。這是因爲端口是一個無符號的16位數字(0-65535),每個出站連接使用其中一個端口。

您可以通過給機器額外的IP地址來擴展此項。每個IP地址是另一個64K地址的地址空間。

+0

另一件要提到的是客戶端的臨時端口範圍。 –

+0

繼續我的搜索,我登陸了BSD的下面的鏈接,它提供了有關kern.maxfiles的一些好處,因爲每個打開的文件,套接字或fifo使用一個文件描述符,而大規模生產服務器可能很容易需要數千文件描述符,取決於同時運行的服務的種類和數量 - http://www.freebsd.org/doc/handbook/configtuning-kernel-limits.html 快速鏈接不起作用嗎?我認爲,這在這裏也起着重要的作用。 –

+0

因此,似乎文件描述符是確定Linux中服務器上特定端口上併發連接數的主要因素之一。 下面的鏈接似乎表達了增加Linux中文件描述符的最大數量的方法 - http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/ http://www.cs.uwaterloo.ca/~brecht/servers/openfiles.html –

3

比你關心的還要多。更確切地說。

  • 超過你的代碼可以實際處理(由於其他原因)
  • 超過你的客戶實際上將使
  • 比你更可以處理在單箱由於性能原因
  • 比你更需要在一個盒子裏,因爲你的負載均衡器會將它們分配到幾個之中因爲可用性原因無論如何

我可以保證它比所有這些都多。有大量套接字的可擴展性限制,可以解決(谷歌的C10K問題)。在實踐中,在Linux下一個進程有可能使用超過10,000個套接字。如果每臺服務器有多個進程,則可以再次增加進程。

沒有必要使用單個端口,因爲如果需要,您的專用負載均衡器將能夠循環多個端口。

如果您爲1000多個客戶端進程中的10多個服務運行服務,則它可能保持正常工作可能相當重要,因此您需要幾臺服務器來進行冗餘。因此,您將不會遇到部署更多服務器的問題。

+1

有趣的是,知道負載平衡器會在多個端口上循環播放! –

+0

人們可以在單個系統(Linux)上輕鬆使用數十萬(如果可用)套接字。絕對是所有可用的。你正在做出錯誤的假設。 – lucian303

-2

我在Windows上做了一個測試,在一個套接字上做了多個環回連接。 Windows在16372標記之後拒絕分配任何東西。

+6

迴環連接有其自身的侷限性。首先,客戶端的操作系統通常只使用一定範圍內的臨時端口(因此只能創建給定數量的端口)。另一方面,127.0.0.1(環回地址)的連接通常使用相同的源地址(即127.0.0.1)。您必須將本地端綁定到不同的地址才能解決這些限制。 – cHao

相關問題