2017-09-08 16 views
0

아시다시피 PHP는 "공유하지 않음"이라는 철학에서 작동합니다. 따라서 심각한 성능 제한이 따릅니다.동일한 PHP 실행 인스턴스를 사용하여 여러 요청을 처리하는 방법은 무엇입니까?

컴파일 된 스크립트는 일부 캐싱 확장으로 가속 될 수 있지만 매우 과도한 초기화는 피할 수 없습니다 (예 : 웹 서비스가 있고 모든 호출에는 DTO 스키마의 구문 분석과 부트 스트랩, 데이터 바인딩 설정, 연결 데이터베이스 (영구적 인 mysql 연결은 실제로 그 관점에서 해킹된다), 다른 원격 서비스를 여는 것 등등).

또한이 문제는 ReactPHP 프레임 워크에서 해결되는 것으로 보이지만 가벼운 비 프레임 워크 솔루션이 있습니까? 해킹 방법, 단일 파일 예제에서 가벼운 라이브러리 (프레임 워크 아님)까지 허용됩니다. 복잡한 웹 서버 재 작성 기능이 필요하지 않습니다. 일반 POST 요청 만 처리하면 충분합니다.

<offtopic>

는 작업 자체가 그것을 할 수

</offtopic>

+0

opcache와 all을 사용하면 매우 큰 영향을주지 않습니다. 대부분의 프레임 워크는 현재 작업을 처리하는 데 필요한 모듈 만로드합니다. HTTP POST가 확실하지는 않지만 소켓이 작동 할 수 있습니다. – Salketer

+0

모듈 로딩이 병목 현상이 아니라 초기화 리소스를 공유해야하는 초기화라고 가정 해 보겠습니다. ReactPHP (단 하나의 그런 프레임 워크?)는 그것을 해결하지만 그것을 사용하는 것은 매우 높은 지원이 아닌 복잡한 프레임 워크에 대한 의존성을 의미합니다. 그러한 간단한 작업에 너무 위험합니다. –

+0

정말 간단한 작업이라면 다른 해결책이있을 것이라고 생각하지 않습니까? PHP의 모든 것은 무국적입니다. exec()에서 상태 저장 리소스를 사용하지 않고 PHP를 매우 슬림하게 유지하지 않는다면 어렵습니다. 하지만 Facebook에 문제가없는 동안이 "병목 현상"이 당신에게 해를 입히지 않을지 의심합니다. – Salketer

답변

1

하나의 좋은 방법 ... 내가 PHP이 아웃 - 오브 - 박스 아직 제공되지 않는 이유를 궁금해 너무 너무 중요하다 일반적인 Java/nodeJS 서버처럼 작동하는 CLI 스크립트가 있습니다. 또한 가벼운 PHP 게이트웨이를 사용하여 HTTP 요청을 수신하고 소켓을 통해 CLI에서 필요한 정보를 요구합니다.

흥미로운 읽기 http://liveforeverbook.info/blog/2008/01/31/persistent-web-apps-in-php/

이다 이것의 핵심은 CLI 스크립트 (자바 서비스 등)에 메모리 메시지 저장소 을 유지하고, 웹 기반를 통해 클라이언트 와 통신이다 PHP "게이트웨이".

IRC 서버 < -> PHP 게이트웨이 < -> 클라이언트 게이트웨이 단계는 실제로 필요한 이 아니라, IRC 서버가 인터넷에 직접 연결된 경우를 통해 올 수있는 쓰레기를 필터링하는 데 도움이됩니다.

콘솔 (PHP server.php)에서 스크립트로 실행중인 IRC 서버를 시작하고 실행중인 상태로 둡니다. CLI 스크립트는 시간 종료가 없기 때문에 수동으로 끄기 전까지는 이 계속 실행됩니다.

1

가벼운 비 프레임 워크 솔루션이 있습니까? 해킹 방법, 단일 파일 예제에서 가벼운 라이브러리 (프레임 워크 아님)까지 허용됩니다.

원하는 항목에 따라 다릅니다. 어떤 종류의 이벤트 루프/스케쥴러가 필요합니다. 이는 주로 amphp/amp/react/event-loop이 제공하는 것입니다. 콜백으로 죽고 싶지 않다면, amphp/amp/react/promise에 의해 제공되는 약속 구현이 필요합니다.

프레임 워크로 이러한 부품을보고 사용하지 않으려는 경우 물론 직접 작성할 수 있습니다. 그러나 다시 한번 당신은 안정적인 소프트웨어를 찾고 있습니다. 이들 중 어느 것이 더 널리 사용되고 있으며 버그가보고되고 고쳐지기 때문에 이것들은 당신의 구현보다 더 안정적 일 것입니다.

이러한 기본 사항 위에있는 것은 모두 라이브러리입니다. 당신이 그들을 사용하거나 자신을 쓸 수 있습니다. 소켓 서버가 필요하다면, PHP의 한계를 극복 한 라이브러리를 사용하지 않을까요?

필요 없음 복잡한 웹 서버 재 작성 기능을 제공합니다. 일반 POST 요청 만 처리하면 충분합니다.

아, 복잡한 웹 서버는 무엇인가? "그냥"일반적인 POST 요청을 처리합니까? 파이프 라인 된 요청을 올바르게 처리하고 업로드 된 파일을 처리하려는 경우 청크 분할 인코딩, 다중 파트 파서 등을 처리하는 HTTP 프로토콜 파서가 필요합니다.

단일 PHP로 여러 요청을 처리하려는 경우 반복 부트 스트랩을하지 않고 프로세스를 수행한다면, PHP-PM을 살펴볼 것을 권하고 싶지만, 현재는 준비가되어 있지 않습니다.