在Windows系统中,一个线程最多可以支持64个Socket。参考原文: Under Windows, there exists a default limit of 64 sockets used by a single signaling thread, so each signaling thread is able to handle at most 32 calls (with H.245 tunneling enabled). 链接:http://www.gnugk.org/gnugk-manual-5.html#ss5.2 第二个要考虑的因素:带宽限制,参考前面的带宽计算方法。如果你要采用动态带宽控制,那么网上也有很多动态控制的算法,这个需要根据你自身的业务来设计。
套接字I/O模型 重叠I/O 和完成端口当然多一些
机器配置 配置高当然多一些
是否支持多CPU CPU多当然多一些以上成立的大前提是代码写的要合理而有效
作为服务器不需要占用端口,对于带宽来说也不是问题,因为流量几乎不会用完。
最重要的是内存,因为每个tcp连接至少要消耗内核内存(不分页内存)17K。
不过这个数字没意义。首先你得保证你的程序能支持。能支持1万人在线的程序员,已经很难找了。
在Windows系统中,一个线程最多可以支持64个Socket。参考原文:
Under Windows, there exists a default limit of 64 sockets used by a single signaling thread, so each signaling thread is able to handle at most 32 calls (with H.245 tunneling enabled). 链接:http://www.gnugk.org/gnugk-manual-5.html#ss5.2
第二个要考虑的因素:带宽限制,参考前面的带宽计算方法。如果你要采用动态带宽控制,那么网上也有很多动态控制的算法,这个需要根据你自身的业务来设计。
在Windows系统中,一个线程最多可以支持64个Socket。------------------------------------使用IOCP。应该不受到限制。处理2000个连接也就4个线程。
第二个要考虑的因素:带宽限制---------------------------------我觉得大家计算带宽的方式很奇怪。
楼上一个人说:
另外与你带宽也有关系,一个用户流量以10K左右计算 10K*1000 = 10MB == 100Mb
我觉得这纯属伪科学。伪科学。伪科学。伪科学。伪科学。伪科学。伪科学。伪科学。伪科学。伪科学。首先一个用户的流量10K?每秒?除非流媒体,否则不可能达到这么大数字!其次。用户是轮训的,也就是说,在socket发送的时候,底层已经是线性处理了。如果send失败,那么你必须要等一段时间继续send。但这个时间往往是100ms以下。就跟CPU处理工作一样。如果我这一秒处理不了,下一秒处理即可,最多也就是失去了及时性,或者说响应时间。
但是总的来说,(除了流媒体这种服务器)如果能把流量用完,真的是很不容易。
在Windows系统中,一个线程最多可以支持64个Socket。 不知道这句话是从哪里看到的阿?
很好奇。
一个连接可以对应一个SOCKET.所以发送连接可以有65535理论上。当接收请求时,可以用端口复用技术,
那么这个端口复用可以支持多少,我也不知道了!
但是我在另外一台机器上只能开3000多个socket,同一个服务器程序,我估计和网卡有很大关系!