2013-12-12 2 views
3

PSGI/Plack 응용 프로그램에서 포크하는 올바른 방법은 무엇입니까?PSGI/Plac 응용 프로그램 (Perl)에서 포크하는 올바른 방법

한편 PSGI 응용 프로그램은 "백엔드에 무관심"하므로 다른 방법 (FastCGI, CGI 등)을 사용하여 실행할 수 있습니다. 하지만 다른 한편으로는 FastCGI 응용 프로그램에서 포크 앞/뒤의 FCGI :: Request 객체로 몇 가지 조작을 수행합니다.

그럼 어떻게해야합니까?

  1. 그냥 포크 :
  2. (어떤 조작?) 마법 조작과 포크를 수행
  3. 재 작성 애플리케이션 아키텍처 => 외부 데몬 프로세스로 모든 무거운 작업을 이동합니다.

답변

1

PSGI는 사양이므로 모든 상황에서 사용할 수 있습니다. mod_perl에서 FastCGIs 서버로 PSGI 응용 프로그램을 실행하거나 CGI로 실행하거나 plac 등의 기본 PSGI 서버에서 실행할 수있는 경우

사용자가 선택한 방법에 따라 시작 방법이 달라집니다. Mod_perl은 아파치 프로세스에 의해 생존하고 죽는다. CGI 스크립트는 외부 적으로 시작되지 않는다. 그러나 FastCGI와 Starman과 같은 독립형 PSGI 서버는 역 프록시에 의해 처리되거나 손으로 시작되고 중지되는 경향이 있습니다. 프록시에 맡기고 PSGI 서버의 설정은 가장 쉽습니다. 때때로 프록시와 독립적으로 외부 프로세스를 제어 할 수 있기를 원합니다.

+0

오, 이해하고 있지만 다른 것을 묻고있었습니다. 예, FCGI, CGI, Starman과 같은 PSGI 서버 등을 사용하여 다양한 백엔드를 사용하여 PSGI 응용 프로그램을 실행할 수 있습니다. 하지만 어떻게해야합니까? 애플 리케이션 - 내 애플 리케이션 runned, 어떤 환경에서 모르겠지만이 _current_ 환경 적절한 포크에 대한 몇 가지 특별한 초기화가 필요합니다 ? –

+0

"포킹"앱은 컨테이너에 의해 처리됩니다. 모든 의도에 대해 FCGI 프로세스가 앱이고 Starman 서비스가 앱입니다. 코드의 컨테이너 역할을하며 프록시와 코드 간의 인터페이스 역할을합니다. 예를 들어 Apache/FastCGI를 선택하면 아파치에게 포크 할 fastcgi 프로세스의 수와 fastcgi 서버에 전달할 URI를 알려줍니다. 앱을 수동으로 포크하는 것은 아닙니다. –

+0

당신은 완전히 옳았습니다. 그러나 뭔가 다른 것에 대해 묻고 있습니다 :) 아마 내 나쁜 영어 죄책감입니다. 내 응용 프로그램에서 "수동"포크에 대해 물어 보았습니다. 예를 들어 -> app recv 일부 요청 및 매우 시간이 많이 걸릴 수있는 일부 중량급 작업을 수행해야합니다. 그래서 fork() 호출을 사용하여 자식 프로세스를 생성하고이 작업을 자식 프로세스에서 실행합니다. IPC에 관한 질문, 사용자가 언제 결과를 얻는 지 등 - 그 장면 뒤에 머물러있게하십시오. 주된 문제점은이 수동 fork() 호출입니다. –