目前的IOCP服务器(WIN版本),大约能支持多少TCP并发连接?

xiaoxiaospace 2011-03-12 11:51:51
有做过的说下,我看网上有人做到了并发9万多???
太夸张了吧
...全文
982 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
qaddafi2008 2013-11-11
  • 打赏
  • 举报
回复
亲们,别再自我YY了,看看大牛的讲解吧: http://yaocoder.blog.51cto.com/2668309/1312821
seamone 2011-09-11
  • 打赏
  • 举报
回复
9W多,那机器还能做别的工作吗,太牛了。
WinEggDrop 2011-03-23
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 aaadddzxc 的回复:]
9W多有点吹NB的感觉了 只连接不做事?
[/Quote]

这贴很明显就是个“理论”贴,就是理论上能上多少并发连接。真实环境中可以处理的连接肯定比这个理论值要低很多,而且更不好预测,因为对发送和接收数据不同的处理方法可以影响实际中可处理的连接数。
xengine-qyt 2011-03-22
  • 打赏
  • 举报
回复
9W多有点吹NB的感觉了 只连接不做事?
zzz_zou 2011-03-22
  • 打赏
  • 举报
回复
这主要还是看机器性能吧, 其实并发量太大, 也可以使用集群服务器方案进行处理的
野男孩 2011-03-22
  • 打赏
  • 举报
回复
对于服务端来说,每个连接都是同一组IP:Port,怎么会有人考虑到65536的限制的,又不是客户端。
哈利路亚1874 2011-03-21
  • 打赏
  • 举报
回复
不过话说回来了,既然是socket的数量,因此就有限制,当然系统默认是65535,不过可以通过修改系统配置修改的,具体的楼主可以调研一下
哈利路亚1874 2011-03-21
  • 打赏
  • 举报
回复
并发9万多和端口数目没关系,说明可以同时支持9万个连接,系统存在9万个socket对象,每个对象确定一个客户端,cpu的个数决定了在同一时间内能够同时处理的连接数。并不是所有的连接都是同时处理的。
smwhotjay 2011-03-20
  • 打赏
  • 举报
回复
WinEggDrop. 不会就是那个写黑软的WinEggDrop吧..感觉很熟悉..
WinEggDrop 2011-03-19
  • 打赏
  • 举报
回复
补充一点,32位的Vista或以后的系统(windows 7,windows 2008等),非分页内存池可以达到75%的物理内存或最高的2GB(视乎哪一个小点,例如3GB物理内存,75% * 3GB = 2.25GB,min(2GB,2.25GB) = 2GB),非分页内存可以到2GB)。
具体可以查看以下连接(英文的):
http://blogs.technet.com/b/markrussinovich/archive/2009/03/26/3211216.aspx
WinEggDrop 2011-03-19
  • 打赏
  • 举报
回复
如果你的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的。
无趣 2011-03-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 tompaz 的回复:]
引用 7 楼 mayudong1 的回复:

为什么都执着于65535那个数呢
服务器端能接收的连接数跟端口数没有什么关系吧

端口复用可以的
[/Quote]
和端口复用也没关系,一个服务端口本来就可与多客户端连接的
shenyi0106 2011-03-14
  • 打赏
  • 举报
回复
1.机器性能
2.IOCP的设计
3.业务逻辑设计

一般的数据中转服务,没有多少业务逻辑的话,几W应该也不是问题
无水先生 2011-03-14
  • 打赏
  • 举报
回复
我看网上有人做到了并发9万多;
也不夸张!
Eleven 2011-03-14
  • 打赏
  • 举报
回复
这个要看你的IOCP怎么设计的
mayudong1 2011-03-14
  • 打赏
  • 举报
回复
为什么都执着于65535那个数呢
服务器端能接收的连接数跟端口数没有什么关系吧
zyyoung 2011-03-14
  • 打赏
  • 举报
回复
2-3k连接,主流家用机
tompaz 2011-03-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mayudong1 的回复:]

为什么都执着于65535那个数呢
服务器端能接收的连接数跟端口数没有什么关系吧
[/Quote]
端口复用可以的
xiayadong 2011-03-13
  • 打赏
  • 举报
回复
9W多?有点怀疑。端口可用数才65535个。

不过上到3-4W还是很真常的。
我测试过:

p4 1.7 512内存,使用IOCP模型,每隔1s进行一次数据交换,上到3W多都很正常。
jwybobo2007 2011-03-13
  • 打赏
  • 举报
回复
除非用了UDP加TCP一起的形式
单一的TCP或者UDP的socket能分配的总数65535个
加载更多回复(3)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧