포트 80에서 수신 대기하는 서버는 여러 프로세스를 처리 할 수 없습니다. 더 오랜 세월의 간단한 TCP 데몬은 한 번에 하나의 연결 만 처리 할 수있었습니다. netcat
특정 포트에서 수신 대기하는 것과 같은 프로그램을 사용하여이 동작을 에뮬레이트 하고 두 대의 컴퓨터를 연결하려고 시도 할 수 있습니다. 하나는 들어오고, 다른 하나는 연결하지 않고 튀어 나옵니다. 이 데몬은 대부분 쓸모가 없으므로 더 이상 볼 수 없습니다.
웹 서버와 같은 것은 포트에서 직접 듣고 있습니다. 명심해야 할 것은 운영 체제의 소켓 라이브러리 위에 있다는 것입니다. 새로운 연결이 이루어지면 소켓 라이브러리는 새로운 소켓을 웹 서버 소프트웨어로 전달합니다. 이때 웹 서버 소프트웨어에는 몇 가지 옵션이 있습니다.
한 가지 가능성은 동일한 프로세스에서 소켓 객체를 새 스레드로 전달하는 것입니다. 이 소켓을 통해 통신 할 때마다이 스레드가 처리합니다. 부모 프로세스는 주어진 시간에 어떤 스레드가 활성화되어 있는지를 중재합니다.
또 다른 가능성은 새로운 프로세스를 시작하고 소켓 객체를 프로세스로 전달한다는 것입니다. 내가 이해하는 것처럼, 이제는 이러한 자식 프로세스와 대상 간의 통신을 중재하는 운영 체제의 소켓 시스템에 달려 있습니다. 상위 프로세스는 여전히 중단 된 프로세스 종료 및 다른 프로세스 간 통신과 같은 프로세스를 제어 할 수 있습니다.
이 중 더 효율적인 방법은 운영 체제에 따라 다릅니다. IIRC, Apache는 어느 모드에서나 실행할 수 있습니다.
본질적으로 소켓 라이브러리는 웹 서버에 병렬 처리 수준을 제공합니다. 새로운 연결을 수락하면서 동시에 데이터를 전송하는 여러 개의 동시 연결을 처리 할 수 있습니다.
로드 시간을 향상시키기 위해 웹 서버에 여러 번 연결을 시도 할 수있는 브라우저의 경우 브라우저 쪽에도 병렬 처리가 적용됩니다. 이는 훌륭하고 훌륭한 것입니다. 브라우저는 페이지가로드 될 때 페이지 상태를 추적하며, 여러 번의 연결 시도는 프로세스의 일부입니다.
recv()
각 프로세스에서 시도하십시오 .