假设我有一个应用程序将在特定的TCP端口上侦听连接。在同一个端口中可以处理的连接数是否有理论上的限制?
或者是否只有基于操作系统和其他属性的实际限制?
我在互联网上搜索但找不到确凿的答案。
由于
答案 0 :(得分:5)
如果进程限制(如ulimit命令所示)为1024,并且您尚未关闭STDIN,则STDOUT和STDERR以及100个文件描述符将被数据库连接和其他文件句柄等项使用,而不是921开放式连接可用于同时处理。这假设所有连接都是并行处理的。每次连接关闭后,将重用这些文件描述符。最终结果是,如果您的应用程序正确处理文件描述符,则启动和关闭应用程序之间的连接总数是无限的。
答案 1 :(得分:2)
在UNIX(非Windows)中,接受的套接字使用文件描述符,因此限制是允许的打开文件描述符数。打开文件描述符的数量是每个进程的限制,包括硬限制和软限制。有关更多信息,请参阅ulimit(2)。
请注意,如果关闭套接字,则释放文件描述符,以便可以重复使用它。 ulimit限制仅适用于同时打开的文件描述符的数量。
要专门回答您的问题,端口可以接受的套接字数量没有限制,仅限于侦听端口的进程可以同时打开的数量。如果存在限制,那么在端口80上侦听的Web服务器将不得不更频繁地重新启动。