PHP 엔진이 이미 서버에서 스크립트를 실행하는 중이라면 동일한 스크립트에 대한 다른 동시 브라우저 요청은 어떻게됩니까?
- 요청이 대기됩니까?
- 무시 될까요?
- 각 요청에 자체 스크립트 인스턴스가 있습니까?
- 다른 가능성은 없나요?
답변:
서버는 구성에 따라 일반적으로 동시에 수백 개의 요청을 처리 할 수 있습니다. Apache를 사용하는 경우 MaxClients
구성 옵션은 다음과 같습니다.
MaxClients
지침이 제공됩니다 동시 요청 수에 대한 제한을 설정합니다. 제한을
초과하는 모든 연결 시도MaxClients
는 일반적으로 ListenBacklog 지시문에 따라 최대 수까지 대기열에 추가됩니다.
다른 요청이 끝날 때 자식 프로세스가 해제되면 연결이 서비스됩니다.
두 클라이언트가 동일한 페이지를 요청한다는 사실은 문제가되지 않습니다.
그래서 :
요청이 대기됩니까?
아니 ; 다음의 경우를 제외하고 :
MaxClients
현재 활성화 된 프로세스 이상이 있습니다. 바로 전에 Apache 매뉴얼의 인용문을 참조하십시오.무시 될까요?
아니오 : 이것은 한 사용자 만 동시에 웹 사이트를 사용할 수 있음을 의미합니다. 이것은 아주 좋지 않을 것입니다.
그럴 경우 누군가가 대답했는지 확인하기 위해 동시에 F5를 치는 곳이라면 나는이 대답을 게시 할 수 없습니다!
(음, SO는 PHP가 아니지만 원칙은 동일합니다)
다른 가능성은 없나요?
네 ^^
OP 및 주석을 편집 한 후 편집하십시오.
각 요청에 자체 스크립트 인스턴스가 있습니까?
" 스크립트 인스턴스 " 와 같은 것은 없습니다 . 간단히 말해서 스크립트에 대한 요청이 이루어지는 곳에서 일어나는 일은 다음과 같습니다.
실제로 두 명의 사용자가 동일한 PHP 스크립트 (또는 모두 동일한 PHP 파일을 포함하는 개별 PHP 스크립트)에 요청을 보내도록 할 수 있습니다 . 그것은 확실히 문제가되지 않거나, 내가 작업 한 웹 사이트 중 어느 것도 작동하지 않을 것입니다!
두 클라이언트가 동시에 서버를 호출하는 경우 서버는 거의 동시에 두 클라이언트에 응답 할 수 있습니다. 여기서 클라이언트는 브라우저 수준으로 정의합니다.
즉, 동일한 컴퓨터에서 2 개의 브라우저를 사용하여 동일한 웹 사이트 / 페이지를 동시에로드하는 경우 둘 다 동시에로드해야합니다.
그러나 우리는 PHP에 대해 이야기하고 있기 때문에 세션에 대해 특별한 메모를해야합니다. 페이지가 세션을 사용하는 경우 서버는 한 번에 한 페이지 만 제공합니다. 이는 스크립트가 종료 될 때까지 세션 파일이 잠기기 때문입니다.
이 예를보세요. 2 개의 파일은 동일한 세션 (일명 동일한 브라우저 동일한 사용자)에서로드됩니다.
scripta.php requested scripta.php served
------+---+---------------------------------+------------------------>
scripta.php started
scriptb.php requested scriptb.php started
---------------+-------------------------------+-----------------+--->
scriptb.php served.
scriptb.php는 scripta.php가 제공된 후에 만 시작됩니다. 이는 scripta.php가 시작될 때 scripta.php가 세션 파일에 쓸 수 있도록 세션 파일이 다른 스크립트에 잠겨 있기 때문입니다. scripta.php가 완료되면 세션 파일의 잠금이 해제되어 다른 스크립트에서이를 사용할 수 있습니다. 따라서 scriptb.php는 세션 파일이 해제 될 때까지 기다린 다음 세션 파일을 잠그고 사용합니다.
이 프로세스는 여러 스크립트가 동일한 세션 파일에 기록하는 것을 방지하기 위해 계속 반복됩니다. 따라서 session_write_close
특히 많은 iframe 또는 AJAX를 사용하는 웹 사이트에서 더 이상 세션을 사용하지 않을 때 () 를 호출하는 것이 좋습니다 .
매우 비표준 설정을 실행하지 않는 한 웹 서버 (Apache, IIS, nginx 등)에는 서버로 들어오는 각 요청에 대해 개별적으로 PHP를 실행하는 여러 프로세스가 있습니다. 동시 요청은 동시에 처리됩니다.