Indy的TCPServer到底能支持多少个连接

 
最近一个项目,最开始使用IdTcpServer,在大压力测试的时候,只连接了800个多一点的客户端(每个客户端连接上之后每秒钟发送一个几十字节的报文,服务器应答)。但是持续的时间不会超过10分钟,服务器就会挂掉(经常是服务器突然关闭消失,任何提示都没有)。后来优化了互斥量之后,可以连接到1000多个客户端。但是服务器消失的问题依然存在。
    今天再一台双CPU,4G内存的服务器上试验了下,居然最也只能连接到2000多个客户端。然后换了Indy10.1.5服务器只做简单的连接和应答,客户端连接之后只发送一个报文,还是一样,服务器最多只能连接2000多个客户端。
    然后下载了Indy10的官方帮助文件(http://www.projectindy.org/downloads/IndyDocs_10.1.5.0_HtmlHelp.zip)它的TCPServer帮助里面有一段话:
    But there are performance and resource limitations imposed by the platform or Operating System on the number of threads that can be created. On Windows, for example, the number of threads is limited by the available virtual memory. By default, every thread gets one megabyte of stack space and implies a theoretical limit of 2028 threads. Reducing the default stack size will allow more threads to be created, but will adversely impact system performance.
    意思理论上Windows的操作系统最多支持2028个线程。于是昏倒了。因为我们的客户端最少也会有5000个呀。
    后来有换了delphi的异步非阻塞TCPServer,测试连接了15000个客户端都没有啥问题。
    难道Indy真的只能支持到2000多个客户端连接?
    各位大侠有用过Indy的TCP服务器的,你们的服务器可以连接多少客户端呀?
 
 
没做过这中压力测试得呢
 
真有这么大量的连接,建议做IOCP+WinSock API,别用控件的
 
Windows的操作系统不一只支持2028个线程的!
用CreateThread测试,数万个都OK的,只是越来越慢而已
 
大量的连接非常注重内存泄漏等问题的,并需要修改源码的
 
 
Indy10支持IOCP和纤程,不过要安装SuperCore包(默认没有),并设置Server的IOHandle,否则Indy10的效能在Windows和Indy9一样
 
 
 
减少线程的stack空间可以增加线程数量,
或者在xp+(只是xp+,不包括win2k)的boot.ini中加上/3GB选项也可以增加进程可用的地址空间。
但是不管怎么说,
在32-bit的Windows上,最多的同步线程在2000~3000这个水平。
支持更多的用户可以使用分布式处理,
即你的主服务器把试图连接的客户端分配到其他服务器去。
象QQ、hotmail之类的都是这么处理的,
每次你连接的都是www.hotmail.com,
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值