tcp长连接到10w的限制

u010235198 2013-04-17 02:35:16
各位大侠,windows机子上的tcp服务器最大能达到的连接数是多少?是否有人测试过

我用boost写的通信库,已经超过10w的连接,测试工具是代码客写的G-TcpDemoForIOCP,分三台机子,分别是5w,4w,1w的连接(排除机子连接数限制)。

不知道10w的连接靠谱不靠谱,心里没底,请问作为tcp服务器达到最大的tcp连接数,其瓶颈是什么?
有人说是内存,有人说是硬件配置,有人说是accept返回的int型socket,有人说是服务器机子的socket可以分配的数(1024-65535)。

请各位大侠仔细说说,不甚感激,附上两张截图
服务器:

客户端:


...全文
21787 63 打赏 收藏 转发到动态 举报
写回复
用AI写文章
63 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangyunzhao 2015-10-22
  • 打赏
  • 举报
回复
引用 61 楼 jhxuehao 的回复:
TcpNumConnections可以修改为1600多万。事实上,如果数据量大了,CPU和内存是不够的。试过IOCP,支持几万可以。一个PC一次性,可以FORK出10万线程,但连接肯定不可能马上全连上,有的要多次重试,不然连不上。测试程序,还需要从客户端与服务器端互传信息,以确认。至于EPOLL之类的轮询,开发IPVS那哥们,肯定懂得。就是IPVS协议虚拟机。好像那哥们,现在都是阿里的老大了。一般处理云端,都不会这样用的,开4000以下的线程,是比较好控制的。一个线程处理1万的连接,就样就看起来,像EPOLL,能处理4000万的连接了。还有一种方式,就是分布式,用网关转,将前端数据,全分布出去,后台,可能有1000台服务器,用户是看不见的。有些硬件协议交换器,比PC快多了。正如百万门的路由交换机一样。
我的windows建议一千多个线程就很卡,机器硬盘性能还不错的哦
yangyunzhao 2015-10-22
  • 打赏
  • 举报
回复
引用 1 楼 tnt230 的回复:
端口数才6W多,你纯TCP怎么可能到的10W?难道是短连接?
服务端一般就侦听一个端口!!! 你说的是客户端
kisslz11 2015-10-21
  • 打赏
  • 举报
回复 1
对于 33楼的无知,表示深切同情!!!
jhxuehao 2015-08-31
  • 打赏
  • 举报
回复
TcpNumConnections可以修改为1600多万。事实上,如果数据量大了,CPU和内存是不够的。试过IOCP,支持几万可以。一个PC一次性,可以FORK出10万线程,但连接肯定不可能马上全连上,有的要多次重试,不然连不上。测试程序,还需要从客户端与服务器端互传信息,以确认。至于EPOLL之类的轮询,开发IPVS那哥们,肯定懂得。就是IPVS协议虚拟机。好像那哥们,现在都是阿里的老大了。一般处理云端,都不会这样用的,开4000以下的线程,是比较好控制的。一个线程处理1万的连接,就样就看起来,像EPOLL,能处理4000万的连接了。还有一种方式,就是分布式,用网关转,将前端数据,全分布出去,后台,可能有1000台服务器,用户是看不见的。有些硬件协议交换器,比PC快多了。正如百万门的路由交换机一样。
bravery36 2015-04-07
  • 打赏
  • 举报
回复
从原理来看,就算是千万连接也没有问题。实际处理的话,10w也需要一定的处理功底,比如说linux下用epoll模型 。
fengge8ylf 2015-04-06
  • 打赏
  • 举报
回复
看一下楼主贴的图就明白了
huguangshanse00 2015-04-05
  • 打赏
  • 举报
回复
服务端有个监听端口,客户端肯定要去bind这个服务器监听端口,服务器监听到有连接,会accept, 可以通过netstat 看下服务器端到底有没有新端口被占用与客户端进行通信。
fengge8ylf 2015-04-05
  • 打赏
  • 举报
回复
肯定不是65536这个限制 服务器能接收的最大连接数应该受限于硬件 但同一台机器作为客户端就受限于65536这个数了 因为每建立一个连接就占用一个端口号 方便的话 做个测试就知道了
辰岡墨竹 2015-04-03
  • 打赏
  • 举报
回复
引用 48 楼 wqn_yz 的回复:
硬件自然有影响,但最主要是由端口号决定的,理论上,同一主机同一IP上同一监听端口上不可能有超过10W个长连接的,理由如下: TCP五元祖包括 : 协议(TCP), 服务端IP,服务器监听端口, 客户端IP,客户端端口 当客户端TCP连接成功后,服务器端会生成一个“已连接套接字”, 可以用上面的所谓5元组来表示,我们可以分析出:前三个都是一样的,协议自然是相同的(TCP),同一IP(不是指双卡或多卡),同一监听端口, 剩下的就是客户端IP和端口,一个端口使用后,就不能被其他客户使用了,所以,最大连接数就是 端口最大可能,端口类型是unsign short,所以,最多只可能有65535个客户能连接到当前IP的监听端口
你都知道是5元组了,为什么还能分析出这种结果? 这一个端口使用了,是客户端的端口,并不是服务器的端口啊。 的确同一个客户端是不能重用这个端口发起连接,但是这个和服务器能不能接收 客户端IP地址不同、端口相同,或者客户端IP地址相同、端口不同的连接啊。
梦想飞 2015-04-03
  • 打赏
  • 举报
回复
引用 52 楼 mymtom 的回复:
[quote=引用 23 楼 erace99 的回复:] 权威答案,并发连接数受端口数限制,不可能大于65535,每一个客户连接上来accept的时候必须分配一个端口号。单台机器并发10W是不可能的
有点常识好不好啊! 我自己都试过10万连接啊! TCP连接有四个变量确定 SERV_ADDR, SERV_PORT, CLNT_ADDR, CLNT_PORT 对于单地址的服务器来说,SERV_ADDR, SERV_PORT 是固定的, 但是CLNT_ADDR, CLNT_PORT明显远远大于10W啊。 目前的实际限制是内存和内核参数而已 [/quote] 这个说法是正确的
ediex 2014-09-08
  • 打赏
  • 举报
回复
这种长链接用node.js,node.js 天生用于解决长连接,据说连接数达单机到30w没问题,你可以用node.js收发数据,数据进入redis这类高性能nosql,后端用c++或java处理与数据库连接,处理好后通过redis发给node.js返回数据给客户端。 有人实验过用node.js支持100万个并发tcp长连接. 自已写这样的高并发代码,这个到处都是陷井。
sniperhuangwei 2014-09-06
  • 打赏
  • 举报
回复
还10W,8W的以下内容截自淘宝褚霸的微博 靠谱的[good]//@0xffffull: 腾讯的架构平台部测试了8G内存稳定的200万长连接;QQ音乐使用Erlang测试过60G的内存达到1KW连接,并保持10W/s的心跳。//@黑夜路人V: 用优化后的go代码来hold连接,单机百万连接大约也是12g~14g内存占用,实际1亿连接需要100台机器,不是因为内存,是因为单机连接128w左右的 下面地址有一个单机百万的实现步骤: http://www.blogjava.net/yongboy/archive/2013/04/28/398558.html https://github.com/ideawu/icomet A C1000K comet/push server built with C++, for web and mobile app
mymtom 2014-09-05
  • 打赏
  • 举报
回复
引用 23 楼 erace99 的回复:
权威答案,并发连接数受端口数限制,不可能大于65535,每一个客户连接上来accept的时候必须分配一个端口号。单台机器并发10W是不可能的
有点常识好不好啊! 我自己都试过10万连接啊! TCP连接有四个变量确定 SERV_ADDR, SERV_PORT, CLNT_ADDR, CLNT_PORT 对于单地址的服务器来说,SERV_ADDR, SERV_PORT 是固定的, 但是CLNT_ADDR, CLNT_PORT明显远远大于10W啊。 目前的实际限制是内存和内核参数而已
hubblest 2014-07-31
  • 打赏
  • 举报
回复
服务器端都是通过一个端口通信的比如80,感觉没有端口数量的限制吧。客户端应该会有限制
wqn_yz 2014-07-06
  • 打赏
  • 举报
回复
硬件自然有影响,但最主要是由端口号决定的,理论上,同一主机同一IP上同一监听端口上不可能有超过10W个长连接的,理由如下: TCP五元祖包括 : 协议(TCP), 服务端IP,服务器监听端口, 客户端IP,客户端端口 当客户端TCP连接成功后,服务器端会生成一个“已连接套接字”, 可以用上面的所谓5元组来表示,我们可以分析出:前三个都是一样的,协议自然是相同的(TCP),同一IP(不是指双卡或多卡),同一监听端口, 剩下的就是客户端IP和端口,一个端口使用后,就不能被其他客户使用了,所以,最大连接数就是 端口最大可能,端口类型是unsign short,所以,最多只可能有65535个客户能连接到当前IP的监听端口
Orange_ou 2014-07-06
  • 打赏
  • 举报
回复
引用 48 楼 wqn_yz 的回复:
硬件自然有影响,但最主要是由端口号决定的,理论上,同一主机同一IP上同一监听端口上不可能有超过10W个长连接的,理由如下: TCP五元祖包括 : 协议(TCP), 服务端IP,服务器监听端口, 客户端IP,客户端端口 当客户端TCP连接成功后,服务器端会生成一个“已连接套接字”, 可以用上面的所谓5元组来表示,我们可以分析出:前三个都是一样的,协议自然是相同的(TCP),同一IP(不是指双卡或多卡),同一监听端口, 剩下的就是客户端IP和端口,一个端口使用后,就不能被其他客户使用了,所以,最大连接数就是 端口最大可能,端口类型是unsign short,所以,最多只可能有65535个客户能连接到当前IP的监听端口
不太明白 红色说的 192.168.1.100: 0x1-0xFF 跟 192.168.1.101: 0x1-0xFF 有什么冲突?
mujiok2003 2014-07-06
  • 打赏
  • 举报
回复
引用
不知道10w的连接靠谱不靠谱,心里没底,请问作为tcp服务器达到最大的tcp连接数,其瓶颈是什么?
首先端口不会是问题, 因为作为服务器只需要一个端口和一个IP。 真正的限制可能来自内核,而内核由所有进程共享。 每一个连接都是占用了不少资源的, 内核多半有限制。 即便对于客户端, 每一个IP < 65535 端口, 我们可以多装n个物理网卡, 配置N 个IP, 可以分配的端口达N * 65535。端口限制已经解决。 最终的限制还是可能在内核。 MSDN says : When the TCP connection limit for an IP address is reached, no additional TCP connections are allowed for the IP address.
easydw 2014-03-04
  • 打赏
  • 举报
回复
引用 46 楼 onlinewan 的回复:
端口号有上限,但tcp server端的连接数理论上可以达到2^48次方这么多,但是还要受限于服务器硬件配置的处理能力。
瞎扯!
onlinewan 2014-02-27
  • 打赏
  • 举报
回复
端口号有上限,但tcp server端的连接数理论上可以达到2^48次方这么多,但是还要受限于服务器硬件配置的处理能力。
小狗狗的专栏 2014-02-20
  • 打赏
  • 举报
回复
大家到底谁说的对呀?
加载更多回复(43)

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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