我想知道 Apache HTTP 服务器程序如何为连接到同一端口 80 的许多客户端提供服务?我知道端口和套接字。我在网上搜索了很多相关内容,但找不到最简单的解释。许多答案都提出了新的问题,例如:
通常,对于每个连接的客户端,服务器都会分出一个与客户端 (TCP) 通信的子进程。父服务器将已建立的套接字移交给子进程,该套接字将与客户端进行通信。当您从子服务器将数据发送到套接字时,操作系统中的 TCP 堆栈会创建一个返回客户端的数据包,并将“来自端口”设置为 80。如果服务器仅使用一个子进程来服务所有套接字,则该服务器称为单进程/线程服务器;如果服务器使用多个子进程通过一个子进程为每个套接字提供服务,则该服务器称为多进程/线程服务器。请注意,无论服务器的类型如何,服务器都可以/应该始终使用相同的初始套接字来响应(无需分配另一个服务器端口)。
Apache HTTP 服务器是多线程的还是单线程的?我的猜测是多线程的。
如果是持续连接,客户端计算机如何再次联系其子进程?父进程是否维护一个表或某些东西来将客户端映射到其子进程?或者每次都会创建一个新的子进程?子进程的生命周期是什么?
答案1
Apache 确实是多线程的,因为它会为每个新连接生成一个新进程。至于子进程的生命周期,当连接因断开连接或超时而中止时,它会被终止。