Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 一次可以打开多少TCP套接字?_Windows_Sockets_Unix_Tcp_Operating System - Fatal编程技术网

Windows 一次可以打开多少TCP套接字?

Windows 一次可以打开多少TCP套接字?,windows,sockets,unix,tcp,operating-system,Windows,Sockets,Unix,Tcp,Operating System,我将开发一个TCP服务器应用程序。我正在执行“选择服务器”步骤。 我的TCP服务器将有2000多个客户端,每个客户端有一个套接字 根据操作系统,创建的套接字数量是否有限制?哪种操作系统允许在给定的时间打开更多的套接字?是的,有一些限制,但您可能永远也无法接近它们(连接与连接或输入连接不同,连接是已经发生和建立的,并且这个数字明显高于其他州。@corsiKa对连接的会话的数量给出了很好的引用。) 以下是一些有用的命令: # Shows some general useful information

我将开发一个TCP服务器应用程序。我正在执行“选择服务器”步骤。 我的TCP服务器将有2000多个客户端,每个客户端有一个套接字


根据操作系统,创建的套接字数量是否有限制?哪种操作系统允许在给定的时间打开更多的套接字?

是的,有一些限制,但您可能永远也无法接近它们(连接与连接或输入连接不同,连接是已经发生和建立的,并且这个数字明显高于其他州。@corsiKa对连接的会话的数量给出了很好的引用。)

以下是一些有用的命令:

# Shows some general useful information,
ulimit -a

# if not, here are some other places to look
# maximum files:
cat /proc/sys/fs/file-max  

# maximum filedescriptors:
cat /proc/sys/fs/file-nr  

# maximum backlog of unaccepted clients:
cat /proc/sys/net/core/somaxconn

# And number of threads to run at once:
cat /proc/sys/kernel/threads-max
限制打开的
连接数的因素基本上是您有多少个可用的本地端口并分配为池,您可以在以下内容中找到此信息:

sysctl net.ipv4.ip_local_port_range
传入端口上还有一个“buffert”,限制您可以同时连接的客户端数量,请在此处查找以下信息:

sysctl net.ipv4.tcp_max_syn_backlog
sysctl net.core.netdev_max_backlog
另外,请在此处找到完整的描述:

a-这相当不错,因为2Gb相当便宜:

在Windows NT、Windows 2000、Windows XP和Windows 2003 Server上,套接字是从非分页内存池分配的,因此可以在系统范围内创建的实际套接字数取决于安装的物理内存量。非分页内存池的大小是物理RAM的1/8,在Windows NT和Windows 2003 Server上最大为128MbWindows 2000及更高版本平台上的容量为56Mb。Windows NT服务器的理论最大容量约为12000个插槽,Windows 2000及更高版本的理论最大容量约为25000个插槽。在实际应用中,可以安全地估计,Windows Server平台可以为Wind的每512Mb物理内存分配约4000个插槽。ows NT,这意味着对于具有1Gb或更多RAM的系统,最大插槽数将在8000左右。对于Windows 2000及更高版本,对于具有2Gb或更多RAM的系统,最大插槽数将在16000左右

这似乎是两年多前的事了:

在过去的几个月里,我们对服务器进行了大量改进,以提高性能、正常运行时间和可扩展性。今天,我们调整了一些旋钮,改变了一些流量,并在一台机器上实现了100万个已建立的tcp会话(并且有内存和cpu可用!)

$netstat-an | grep-c EST

1016313


所以介于10^5和10^7套接字之间。

是在“选择编程语言”之前还是之后选择“选择服务器”?@corsiKa:可以同时打开的套接字的最大数量取决于操作系统,而不是编程语言。当然,除非您使用的语言人为地限制了打开的文件描述符的数量。@GuntramBlohm说,如果他选择自己处理司机和连接……但这是疯狂和核心的……硬件也有限制:)@Guntram向我的帖子中那些在一个盒子上运行超过100万次的家伙解释一下。如果所有客户端都连接到您,那么本地端口范围甚至无关紧要。想想一个http服务器,它可以从一个80端口提供1000个连接。@GuntramBlohm我知道sherlock:)但是OP写的
创建套接字有限制
,在我的世界里,创建套接字与“我将连接到某个东西”是一样的,这是客户端的。所以我只提供了足够的信息来涵盖客户端和服务器端的参数,因为它们有很大的不同:)但是你在技术上是正确的。。一台服务器可以在一个端口上承载1000台(如果不是更多的话)。。这就是netdev_max_backlog发挥作用的地方:)“somaxconn”不是“最大半开放连接”,它是最大backlog,backlog也不是“可以同时连接到您的客户端数量”,它是TCP已完成但尚未传递到接受的连接队列的长度-1@EJP你能定义一下“连接到你”和“尚未被接受”之间的区别吗?因为对我来说,这是一回事。另外,一半打开的连接与待办事项相同,它是一个等待发生但尚未被接受和完全打开的连接。因此,半开。不知道你把这和什么搞混了?还是我走得太远了?这里唯一的困惑是你的。(1) 您可以使用一个客户机和足够的顺序连接来填充积压工作队列。因此,它与同时性或多个客户机无关。(2) 待办事项队列上的连接在所有意义上都是完整和开放的:SYN、SYN/ACK和ACK都已交换,客户机可以发送或接收,尽管他当然会在接收中阻止,直到服务器发送某些内容为止,假设是阻塞模式等。(3)TCP中半开放的连接是半关闭的连接,使用
shutdown(fd,shutdown\u-WR)。
你已经偏离了方向。这根本不准确,扭曲。在野外有1000万个持续连接的例子,每秒100万个连接(平均持续时间为10秒)。