2017-12-20 18 views
1

내 문제는 내 심포니 응용 프로그램이 아파치 5.7.19 동시 요청을 처리하지 않습니다/2.4.6 (CentOS는) PHP/5.6.31 MySQL과 연동하여 원격 시스템에서 동작하는 동시 요청을 처리하지. 동시에 두 개의 서로 다른 페이지를 요구할 때의 의미. 첫 번째 것은 끝내야 두 번째 것이 렌더링 될 수 있습니다.심포니는

나는 동시에 (가 교리처럼 PDO되지되지 MySQL의 연결을 사용)에 가능한 한 많은 페이지를 렌더링 문제가 없습니다 일반 PHP로 작성된 동일한 서버에 다른 사이트 있습니다.

그건 내가 다음 테스트를했다고 말했다 : 나는 sleep (3)을 삽입했다. 내 DefaultController. 그 페이지를 요청하고 동시에 다른 페이지를 요청했습니다. 절전 (전화 1)와

페이지 : : 수면 (전화 2)없이 Page with sleep (called 1st) 페이지 아래의 두 가지 프로파일을 참조하십시오. Page without sleep (called 2nd)

  • 페이지 1 일반로드 시간은 782ms
  • 페이지 2 일반로드 시간이 108ms

입니다 당신은 심포니의 HTTP 방화벽이 모든 시간의 복용 볼 수 있듯이 로드 할 두 번째 페이지. 제 생각에는 (바보일지도 모름) 첫 번째 작업은 데이터베이스 연결을 유지하며 완료 될 때까지만 다른 작업을 사용하도록합니다. 특히 Doctrine이 PDO 연결을 사용하는 것과 관련이 있습니다. What is the Symfony firewall doing that takes so long? - - Why is constructing PDO connection slow? - https://www.drupal.org/node/1064342

P.S. : 그런데

는 이미 같은 도움과 기사를 읽고아파치 설정에서 app.php와 app_dev.php를 모두 사용하려고 시도했지만 아무 것도 변경되지 않았습니다. app_dev.php에 붙어있어서 프로파일 러를 가질 수 있습니다. Symfony의 서버 빌드를 이용한 지역 개발 결과가 동일합니다.

+0

소리가 PHP 세션 잠금처럼 들립니다. http://konrness.com/php5/how-to-prevent-blocking-php-requests/ – DanielO

답변

2

PHP에서 동일한 세션에 대한 동시 요청을 2 개 가질 수 없으므로 방화벽을 사용할 때 Symfony는 사용자 세션을 잠그고 사용자 세션을 해제 할 때까지, 다른 페이지를 렌더링 할 수 없습니다.

은 세션 종료 후에는 잠금을 해제합니다 : 당신이 당신의 세션 속성을 업데이트 할 수 없습니다 그 후,

$session->save(); 

이 어떤 의미를 가지고 있습니다.

세션 관리 : https://symfony.com/doc/current/components/http_foundation/sessions.html

세션 인터페이스 : 당신이 다른 세션과 다수의 동시 사용자가있는 경우 http://api.symfony.com/4.0/Symfony/Component/HttpFoundation/Session/SessionInterface.html#method_save

PHP를 동시에 제공 할 것을 요청합니다.

+0

대단히 감사합니다. 이것은 실제로 잠금 문제를 해결했습니다. 그러나 원래의 문제는 cronjob을 통해 실행되는 Symfony 콘솔 명령을 작성 했으므로 완료하는 데 많은 시간이 걸리는 것입니다. 이 작업으로 내 시스템을 잠글 수있는 방법 (실수하지 않은 경우) 세션을 사용하지 않습니다. – marioskamperis

+0

스코프가 현재의 질문과 상당히 거리가있어서 거기에 명령을 추가하기 때문에 다른 질문을 만들 것을 권합니다. – albert