我有一个稍微不寻常的情况,我需要维护客户端tcp连接到另一台服务器上的数千移动用户在我的服务器上(基本上移动设备连接到我的中间层服务器,当他们能够,这保持了一个更稳定的连接到移动设备的第三方服务器)。
无论如何,我已经开发了我的服务器应用程序使用asynchronous套接字(包装在SslStream中),并有1000个客户端会话现在全时运行。 我对结果非常满意,因为我看到单个核心处理器的平均cpu利用率为0-10%,随着时间的推移,大约有60mb的ram被使用。
我的问题是,如何扩展这个范围,以便我的服务器上可以运行100,000或20万个或更多的客户端会话? 再一次,这是有点不传统的,因为我的服务器不是真的像服务器,因为我担心传出连接,而不是传入。
我知道有一个registry设置MaxUserPort需要改变,以超越默认值,似乎是5000.但是,似乎有另一个65535的硬性限制,我不太清楚该限制所在的位置。 这是每个networking接口的限制吗? 这是全球Windows的限制吗? 这是每个进程的限制吗?
为什么通过WMI只应用一次静态IP地址?
如何避免或限制MDI Child Form菜单条与MDI Parent Form菜单条合并?
用C#和远程桌面问题捕获屏幕
Windowssearchsql:LIKE语句中的分号导致exception(E_FAIL 0x80004005)
如何在c#.net windows应用程序中检查gridview的行是否被选中
如果是每个networking接口的限制,我可以添加多个networking接口并将客户端会话套接字绑定到每个接口(例如:接口1上的65k,接口2上的65k等)?
我也不太确定,如果有套接字选项或属性,我应该设置帮助的东西了。 现在我没有使用任何套接字选项。
我真的很感激这个问题的任何想法,因为在这个问题上很难得到明确的build议。 谢谢!
C#检测所有窗口中的关键事件
自动更新C#程序
TimeZoneInfo和CultureInfo的System.DateTime和Caching
Windows机器可以轻松扩展到大量的打开连接。 64k临时端口限制是每个IP地址,而不是每台机器。 如果您需要更多的临时端口,请按照@SuperTux的建议增加限制,但也可以为机器分配更多的IP。 为了充分利用,你必须在你的客户端套接字上手动调用Bind(),并且使用空闲端口从你的池中传递一个源IP(这也意味着你将负责跟踪每个地址可用的临时端口数)。 很多高端设备类型的设备都是这样做的(例如,负载平衡器上的SNAT池),以支持数十万个并发连接。
簿记是一个麻烦,但比每个64K客户端连接投掷利用不足的硬件更好。
65355是IP协议的限制,更重要的是大多数操作系统的TCP / IP协议栈的限制。
要增加Windows上的临时端口的最大数量,请按照下列步骤操作:
启动注册表编辑器
在注册表中找到以下子项,然后单击参数:HKEY_LOCAL_MACHINE SYstem CurrentControlSet Services Tcpip Parameters
数值名称: MaxUserPort
值类型: DWORD
价值数据: 65534
有效范围: 5000-65534(十进制)
默认值: 0x1388(十进制5000)
说明:该参数控制程序从系统请求任何可用用户端口时使用的最大端口号。 通常,短暂(短暂的)端口被分配在1024和5000之间(包括端点值)。
通常要扩展到超过65K端口,您可以使用群集中的多个服务器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。