本文主要是介绍调整本机可发起的TCP连接和可接受的TCP连接的方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
调整本机可发起的TCP连接和可接受的TCP连接的方法:
适用的操作系统:
Microsoft Windows NT Workstation versions 3.5, 3.51, 4.0
Microsoft Windows NT Server versions 3.5, 3.51, 4.0
Microsoft Windows 2000 Professional
Microsoft Windows 2000 Server
Microsoft Windows 2000 Advanced Server
方法:
修改(添加)注册表,并重新启动系统:
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services 下面:
TcpNumConnections
Key: Tcpip/Parameters
取值类型:REG_DWORD - Number
取值范围:0 - 0xfffffe
缺省值:0xfffffe
描述:本参数限制可以同时打开的TCP连接的数量
MaxUserPort
key: Tcpip/Parameters
取值类型:REG_DWORD - Number
取值范围:5000-65534 (十进制)
缺省值:0x1388 (5000 十进制)
描述:控制一个应用程序可以打开的最多端口数量。通常,短命的端口在1024-5000之间分配。
当试图发起5000以上端口的连接,系统将出现WSAENOBUFS(10055)错误:因为队列满或者系统
缺乏足够的缓冲空间。
下面是我的IOCP TCP服务器单机测试结果:
15:201 | | | | | | TIOCPServerCore.Dump Begin==================================>
15:201 | | | | | | Socket线程数量=2
15:201 | | | | | | 缓冲区尺寸=4096
15:211 | | | | | | 空闲缓冲区数量=3
15:211 | | | | | | 使用缓冲区数量=16275
15:211 | | | | | | 最大空闲缓冲区数量=500
15:221 | | | | | | 空闲Socket数量=0
15:231 | | | | | | 使用Socket数量=16274
15:231 | | | | | | 最大空闲Socket数量=500
15:241 | | | | | | 业务处理线程数量=1
15:241 | | | | | | 最大空闲业务处理线程数量=2
CPU占用率很低,内存占用10M左右
本机发起和接受的TCP连接数是16274,好像是最大的可发起连接数了,如果有
别的机器可能可以更多,Microsoft资料说可以接收200000个连接
服务器反应迅速
请说明您的tcp服务器使用的是什么io模型,我说的是socket I/O 模型!
一下是各种io模型的大概性能比较。
I/O 模型 尝试数/连接成功数
block: 7000/1008
noBlock: 7000/4011
WSAAsyncSelect: 7000/1956
WSAEventSelect: 7000/6999
Overlapped: 7000/5558
completion port: 7000/7000, 50000/49997
在没有搞懂下面的函数之前,别指望你的服务器会有很高的性能(有的tcp服务器的性能和连接数根本和游戏服务器没法相比,原因就在这里)
ioctlsocket,WSAAsyncSelect,WSACreateEvent,WSAEventSelect,WSAWaitForMultipleEvents,CompletionROUTINE,CreateIoCompletionPort,GetQueuedCompletionStatus。。。。。
这篇关于调整本机可发起的TCP连接和可接受的TCP连接的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!