Red*_*dth 12 .net c# sockets windows windows-server-2003
我有一个稍微不寻常的情况,我需要在我的服务器上为成千上万的移动用户维护CLIENT tcp连接到另一台服务器(基本上移动设备能够连接到我的中间层服务器,这样可以保持更稳定的连接到移动设备的第三方服务器).
无论如何,我使用异步套接字(包含在SslStream中)开发了我的服务器应用程序,并且现在有1000个客户端会话全时运行.我对结果感到非常满意,因为我看到单核处理器的平均CPU使用率为0-10%,并且随着时间的推移大约使用了60mb的ram.
我的问题是,如何扩展它以便我可以在我的服务器上运行100,000或200,000或更多客户端会话?同样,这有点非传统,因为我的服务器并不像服务器那样,因为我担心传出的连接,而不是传入.
我知道有一个注册表设置MaxUserPort需要更改,以超出默认值,似乎是5000.但是,似乎有另一个硬限制65535,我不太清楚该限制所在的位置.这是每个网络接口的限制吗?它是全局Windows限制吗?这是每个流程的限制吗?
如果它是每个网络接口的限制,我可以添加多个网络接口并将客户端会话套接字绑定到每个接口(例如:接口1上的65k,接口2上的65k等)?
我也不太清楚是什么,如果有任何套接字选项或属性我应该设置来帮助解决问题.现在我没有使用任何套接字选项.
我真的很感激有关这个问题的任何想法,因为在这个问题上很难得到明确的建议.谢谢!
nit*_*one 11
Windows机器可以轻松扩展到非常多的开放连接.64k临时端口限制是每个IP地址,而不是每台机器.如果您需要更多短暂端口,请按@SuperTux建议增加限制,但也要为机器分配更多IP.为了利用,您必须在客户端套接字上手动调用Bind()并从池中传递带有空闲端口的源IP(这也意味着您将负责跟踪每个地址的可用临时端口计数).许多高端设备类型设备执行此操作(例如,负载平衡器上的SNAT池)以支持数十万个并发连接.
簿记是一件麻烦事,但比为每个64k客户端连接投入未充分利用的硬件更好.
归档时间: |
|
查看次数: |
6900 次 |
最近记录: |