gpt4 book ai didi

c# - .NET/Windows Server 中的最大传出套接字连接数

转载 作者:可可西里 更新时间:2023-11-01 12:35:13 26 4
gpt4 key购买 nike

我有一个稍微不寻常的情况,我需要为我服务器上的数千个移动用户维护与另一台服务器的 CLIENT tcp 连接(基本上,移动设备在能够连接到我的中间层服务器时,维护了一个移动设备与第 3 方服务器的连接更稳定)。

无论如何,我已经使用异步套接字(封装在 SslStream 中)开发了我的服务器应用程序,并且现在有 1000 个客户端 session 在其上全时运行。到目前为止,我对结果非常满意,因为我看到单核处理器的平均 CPU 使用率约为 0-10%,并且随着时间的推移使用了大约 60mb 的内存。

我的问题是,如何扩大规模,使我的服务器上运行的客户端 session 达到 100,000 或 200,000 个或更多?同样,这有点不传统,因为我的服务器实际上并不像服务器,因为我担心传出连接,而不是传入连接。

我知道有一个注册表设置 MaxUserPort 需要更改以超出默认值(似乎是 5000)。但是,似乎还有另一个硬限制 65535,我不太清楚该限制在哪里居住。这是每个网络接口(interface)的限制吗?它是全局 Windows 限制吗?每个进程有限制吗?

如果这是每个网络接口(interface)的限制,我可以添加多个网络接口(interface)并将客户端 session 套接字绑定(bind)到每个接口(interface)(例如:接口(interface) 1 上 65k,接口(interface) 2 上 65k 等)吗?

我也不太确定我应该设置什么套接字选项或属性来帮助解决问题。现在我没有使用任何套接字选项。

我非常感谢关于这个主题的任何想法,因为在这个主题上很难获得明确的建议。谢谢!

最佳答案

Windows 机器可以轻松扩展到非常多的打开连接。 64k 临时端口限制是每个 IP 地址,而不是每个机器。如果您需要更多的临时端口,请按照@SuperTux 的建议增加限制,但也要为机器分配更多的 IP。要利用这一优势,您必须在客户端套接字上手动调用 Bind() 并从具有空闲端口的池中传递源 IP(这也意味着您将负责跟踪每个地址的可用临时端口数)。许多高端设备类型的设备都这样做(例如,负载均衡器上的 SNAT 池)以支持数十万个并发连接。

簿记很麻烦,但总比为每 64k 客户端连接投入未充分利用的硬件要好。

关于c# - .NET/Windows Server 中的最大传出套接字连接数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1745862/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com