我用IOCP实现了一个TCP服务端,由于特殊需求客户端几乎是全天保持在线的,使用TCP就意味着需要一直保持这个Socket。目前服务端已经完成。但在压力测试的时候,支持同时连接的客户端数量为3700人。超过这个数字就不再接受新的连接了。ACCEPTEX函数不再返回。此时查看任务管理器,服务端进程的句柄数量为9999,但内存和CPU占用都微乎其微。我想可能是Windows限制了单个进程的最大句柄数量,导致只能接受3700个连接。有什么办法扩大这一数字吗?调试发现,IOCP每增加一个连接,要耗费三个句柄。查了一些资料,Windows确实限制单个进程的最大句柄数量。 不知道IIS支持多少同时保持连接的,他怎么做到的。

解决方案 »

  1.   

    1.什么操作系统?建议使用server版的进行测试,比如Windows 2003 Enterprise + SP2
    2.操作系统当中安装了什么防病毒软件,比如象江民之类的就会锁连接数;
    3.最大连接数可以达到10万的理论值,实测可以达到5~6万
      

  2.   

    我用的是2003Server 服务器很干净,没有装任何东西。连接数每增加一个在任务管理器能看到进程增加了3个句柄,句柄打到1万的时候就无法建立新连接了。ACCEPTEX函数不再返回。 大概也就是3300多链接就无法接受新的连接了。很是郁闷。
      

  3.   

    "3.最大连接数可以达到10万的理论值,实测可以达到5~6万"
    能有10W? port最大也就是65535你怎么来10W
      

  4.   

    accept的连接,只是一个session,受限的是内存,与之相关的是socket描述符,而不是port,实际上它是以ClientIP+ClientPort+ServerIP+ServerPort作为唯一性确定的.