目前的IOCP服务器(WIN版本),大约能支持多少TCP并发连接?
本帖最后由 VisualEleven 于 2011-03-13 04:37:12 编辑 有做过的说下,我看网上有人做到了并发9万多???
太夸张了吧
[解决办法]
这个也要看服务器的性能是怎样的,因为一般IOCP是根据CPU的数量来申请线程的
[解决办法]
tcp端口也就65536个. 如果非要达到9万多.还要用udp通讯.两个合力可以并发9w多连接.而且要机器cpu很强同时iocp和udp设计的要合理.高效.避免无用的cpu浪费.内存浪费.而且要每个连接收发量小.比如每30秒才和server通讯一次.如果频繁通讯,server会被d死的.
[解决办法]
除非用了UDP加TCP一起的形式
单一的TCP或者UDP的socket能分配的总数65535个
[解决办法]
9W多?有点怀疑。端口可用数才65535个。
不过上到3-4W还是很真常的。
我测试过:
p4 1.7 512内存,使用IOCP模型,每隔1s进行一次数据交换,上到3W多都很正常。
[解决办法]
2-3k连接,主流家用机
[解决办法]
为什么都执着于65535那个数呢
服务器端能接收的连接数跟端口数没有什么关系吧
[解决办法]
这个要看你的IOCP怎么设计的
[解决办法]
我看网上有人做到了并发9万多;
也不夸张!
[解决办法]
1.机器性能
2.IOCP的设计
3.业务逻辑设计
一般的数据中转服务,没有多少业务逻辑的话,几W应该也不是问题
[解决办法]
如果你的CPU够强劲的话,网络带宽也够的话,那么最高并发连接,就要看你系统中有多少非分页内存池可用了。32位的windows操作系统,无论你物理内存多大,可用的非分页内存池最大也是256M(32位win 7和windows 2008不清楚是否适用于这个)。以下就来算一下帐(假设服务器是接收连接,并不向外发起任何连接):
1.accept()或AcceptEx(),每接收一个连接,要占用1.5k左右的非分页内存池内存
2.任何一个默认的WSASend()或WSARecv(),至少锁上4KB或以上非分页内存池内存
假设你操作系统的驱动和其它必须软件占用了50MB的非分页内存池内存,那剩下了200MB非分页内存池,再假设你的程序只是接收连接,不做任何 WSASend(),WSARecv()或向外连接的操作,那么你的IOCP服务器最大可接收的连接为:200MB * 1024 KB/MB / 1.5 KB = 136533个连接。
但如果你的IOCP服务器是向外做TCP连接的话,那么每个connect()要用2KB左右非分页内存池内存,而且还要受限于系统可分配的TCP端口总数(65535)
如果操作系统是64位的windows,如果物理内存很大的话,非分页内存池是比32位操作系统的要大很多.32位系统的最大非分页内存池只能到256MB,而64位系统的最大非分页内存池可以到达可怕的128GB.那如果IOCP服务器是运行在64位的windows下(XP以后的操作系统),那可以支持的并发连接,是随便能超过10多W的。
[解决办法]
并发9万多和端口数目没关系,说明可以同时支持9万个连接,系统存在9万个socket对象,每个对象确定一个客户端,cpu的个数决定了在同一时间内能够同时处理的连接数。并不是所有的连接都是同时处理的。
[解决办法]
对于服务端来说,每个连接都是同一组IP:Port,怎么会有人考虑到65536的限制的,又不是客户端。
[解决办法]
这主要还是看机器性能吧, 其实并发量太大, 也可以使用集群服务器方案进行处理的
[解决办法]
9W多有点吹NB的感觉了 只连接不做事?