2017-09-06 2 views
1

HTTP 서버가 notice: Process Backgrounded으로 터미널에서 분리됩니다. 그것이 전경에 머물게 만드는 방법?전경 NetServer 작성 방법

코드 :

#!/usr/bin/env perl 

use warnings; 
use strict; 

use XML::Compile::WSDL11; 
use XML::Compile::SOAP11; 
use XML::Compile::Transport::SOAPHTTP; 
use XML::Compile::SOAP::Daemon::NetServer; 

my $daemon = XML::Compile::SOAP::Daemon::NetServer->new; 

my $wsdl = XML::Compile::WSDL11->new("def.wsdl"); 

$daemon->printIndex(); 

$daemon->run(
    name => 'server', 
    host => 'localhost', 
    port => 7111, 
    min_servers => 1, 
    max_servers => 1, 
    min_spare_servers => 0, 
    max_spare_servers => 0); 

답변

4

XML :: 컴파일 :: SOAP :: 데몬 :: NetServer를 서버 구현으로 Net::Server를 사용합니다. 관련성이있는 것으로 보이는 configuration option background in Net::Server이 있습니다. 기본값은 undef이며, 은 전경으로 유지됩니다..

서버가 명령 줄에서 자체를 해제하기 위해 바인드 메소드를 fork해야하는지 여부를 지정합니다. 기본값은 undef입니다. setsid가 설정된 경우 프로세스도 백그라운드로 표시됩니다.

는 XML :: 컴파일 :: SOAP :: 데몬 :: NetServer를 당신이 background 설정에 대한 참조를 가지고 Configuration section을 찾을 수의 문서에 배경를 검색 할 때.

Net :: Server의 일부 일반 구성 옵션에는 다른 기본값이 있습니다. 로깅에 대한 다음 절을 참조하십시오. 그래서 기본적으로

Key    Value    New default 
setsid   boolean   true 
background  boolean   true 

, 그것은 진정한 값으로 설정되어, 서버는 백그라운드로 이동합니다. 그렇게하면 쉽게 바뀔 수 있습니다.

$daemon->run(
    name    => 'server', 
    host    => 'localhost', 
    port    => 7111, 
    min_servers  => 1, 
    max_servers  => 1, 
    min_spare_servers => 0, 
    max_spare_servers => 0, 
    background  => 0,    # <------ here 
    setsid   => 0,    # <------ and here ("Process will also background if setsid is set") 
); 

이제 서버는 프론트 엔드에 머무르고 포크하지 않으며 한 번에 하나의 요청 만 처리합니다.

+0

@Velkan에 감사드립니다. 나는 견적에 거기에 있었지만'setsid'을 보지 못했습니다. ;) – simbabque

관련 문제