Windows Server 2008中可以拥有的最大TCP连接数是多less?

为了支持Comet风格的应用程序,我想在Windows Server 2008上运行的服务器上尽可能多的连接(来自许多不同客户端的单个连接)。 该应用程序是用C#编写的。 连接不会喋喋不休,他们只需要打开(并保持打开状态)。 购买内存和快速CPU不是一个问题。

据我所知,我将被限制为每个网卡65k的同时打开连接数 – 最大端口数。 这是准确的吗? 或者我能以某种方式超越65k连接/ NIC吗? 似乎有Linux的服务器产品,至less支持成千上万的连接。 他们如何做到这一点?

你可以远远超过65k连接; 因为每个端口可以有多个连接(一旦接受,监听器可以连接到另一个客户端)。 一端或另一端必须有一些区别,通常客户端会随机select一个端口。 Windows默认限制在这些随机端口的3000多个; 所以你的典型的客户端会在最大程度上绕过。 然而,可以对客户端进行不同的configuration,许多* nix仅限于Windows。

有一个registry设置限制连接的最大数量为1600万。 但是,还有其他更实际的问题,通常会限制你less(可以更改registry值)。

  • Windows每个连接占用大约1KB的内存(对于16M连接,这大约为16GB); 你的应用程序也将不得不跟踪它的活动连接(更多的内存)。
  • Windows还会在两个小时内检查无响应的连接。 在16M连接时,大约每0.5毫秒; 只要做这些检查就会占用很大的带宽。