4

我正试图解决这个问题。我正在制作一个特定于业务的消息传递应用程序,它将通过 WCF(没有 vpns,整个网络)将 5000 到 10,000 台机器连接回我们的数据中心。它主要用于警报,我需要能够直接向特定客户端发送消息,而 WCF 允许我使用双工合同来完成所有这些工作,但是对于这么多客户端,它让我开始考虑最大化 TCP 端口空间65535 个端口。

我将假设所有入站连接都将通过我选择的任何端口进入,但返回客户端的出站连接将分别占用一个端口。我很好奇 WCF 端口共享服务是否可以解决此问题,或者它是否只有 65535 个端口到 IP 地址?那么,MSN Messenger 之类的如何处理这种情况。诚然,我可能永远达不到它,但至少我正在进入这个领域。

还是服务端的 WCF 双工合同在客户端期间保持端口打开以进行回调,还是释放它?

4

4 回答 4

4

在高打开/关闭事务环境(例如服务非持久连接的套接字服务器)中耗尽默认 TCP 堆栈仍然很容易。

默认的 TIME-WAIT 延迟会加剧这种情况 - 套接字在被回收之前必须关闭的时间量 - 默认为 90 秒(如果我没记错的话)

要从我的其他线程中回收一些位 - 有一堆可以调整的注册表项 - 建议至少创建/编辑以下键

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

TcpTimedWaitDelay = 30
MaxUserPort = 65534 
MaxHashTableSize = 65536 
MaxFreeTcbs = 16000 

MSDN 和 Technet 上有大量关于这些键功能的文档。例如

http://technet.microsoft.com/en-us/library/cc776295.aspx

为套接字服务器应用程序(例如 SQL、Biztalk、IIS 等)调整这些键是很常见的。

于 2008-11-13T07:00:52.337 回答
3

我认为每个端口实际上是 DestinationTCPAddress 和端口号的组合 - 所以你不会用完。

即,您可以在同一个源端口上与多个订阅者通话。这只是容量问题。

于 2008-11-13T06:21:21.107 回答
2

如果这些连接都将是并发的,那么您将需要确保您的防火墙可以同时处理这么多的连接。

状态防火墙需要记录通过它们的每个正在进行的连接,以便它们可以判断是否允许后续数据包。小型防火墙具有数百个会话限制并不少见。

于 2008-11-13T09:28:27.500 回答
2

连接在源地址、目标地址、源端口、目标端口方面是不同的(至少在 IP 层)。对最大连接数的某种操作系统限制可能会成为一个问题,但不要对端口号本身是任何现实限制的想法感到困惑。

于 2008-11-13T13:04:28.103 回答