服务器如何处理大量 80 端口连接

服务器如何处理大量 80 端口连接

不可否认,这是一个简单的问题,但我谷歌搜索了 20 分钟,就是找不到答案......我将用一个例子来阐述我的问题。

假设我拥有 www.reallypopular.com,我的网站每秒收到 100 个 GET 请求。另外假设我的服务器响应该 GET 请求的平均时间为 1 秒(为了便于举例,假设服务器端进行了一些处理。)我对端口的理解是,第一个联系我的服务器的客户端会阻止其他任何人连接到端口 80 1 秒。按照这种逻辑,实际上只有 1% 的用户会得到响应,其余用户会收到“端口繁忙”或“无响应”或类似的错误。

显然我忽略了一些东西,因为这显然不是正在发生的事情,所以除了提出我的理论来解释为什么会这样,如果有人能在这里纠正我或者给我指出一些我可以阅读的东西来澄清这个问题,我会很高兴。非常感谢。

答案1

答案可以在维基百科文章:

实现常见服务的应用程序通常使用专门保留的、众所周知的端口号来接收来自客户端主机的服务请求。此过程称为侦听,涉及在众所周知的端口上接收请求并重新建立另一个私有端口上的一对一服务器-客户端通信,以便其他客户端也可以联系知名服务端口。

另外,来自维基百科上有关伯克利套接字的文章。

当应用程序正在侦听来自其他主机的面向流的连接时,它会收到此类事件的通知(参见 select() 函数),并且必须使用 accept() 函数初始化连接。Accept() 创建一个 每个连接都有新的套接字并从监听队列中删除该连接。

答案2

当客户端连接并且 TCP 服务器接受该连接时,新插座在服务器上创建用于与此客户端通信的套接字。原始监听套接字继续监听新请求,新套接字用于从特定客户端发送和接收。请注意,除了主监听套接字外,具有 N 个活动客户端的 TCP 服务器将为每个客户端提供 N 个可读/写的套接字。所有这些 N+1 个套接字都应该位于相同端口号(服务器的知名端口号),但它们在服务器代码内部具有不同的套接字文件描述符。

来源

答案3

TCP 不是这样工作的。从另一个系统连接到某个端口并不意味着该端口不能接收其他连接。从维基百科关于 TCP 的文章

到达的 TCP 数据包通过其套接字(即源主机地址、源端口、目标主机地址和目标端口的组合)来识别属于特定的 TCP 连接。

相关内容