개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.05.07 11:26

SwooleServer::addProcess 관련 질문

목록
  • 패턴마스터 17시간 전 2025.05.07 11:26 새글
  • 2
    1
제가 SwooleServer::addProcess를 사용하여 프로세스를 추가하였는데,
이때 프로세스가 종료되면 자동으로 새로운 프로세스를 생성하는 방식으로 동작하나요?
또한, 새로운 프로세스를 생성하는 경우 기존 프로세스의 데이터를 어떻게 전달하나요?

이러한 부분에 대해 자세한 설명과 예제를 알려주시면 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  17시간 전



    SwooleServer::addProcess를 사용하여 프로세스를 추가하면, 해당 프로세스가 종료되더라도 새로운 프로세스를 자동으로 생성하는 방식으로 동작하지 않습니다.

    이러한 동작을 수행하려면, 프로세스 관리를 위한 별도의 로직이 필요합니다.

    예를 들어, 프로세스가 종료되면 새로운 프로세스를 생성하고, 기존 프로세스의 데이터를 전달하기 위해, 다음의 방법을 사용할 수 있습니다.

    1. 프로세스 간 통신을 사용하여 데이터를 전달합니다.
    * SwooleServer::addProcess를 사용하여 프로세스를 추가할 때, 프로세스 간 통신을 위한 통로를 생성할 수 있습니다.
    * 프로세스가 종료되면, 새로운 프로세스를 생성하고, 기존 프로세스의 데이터를 통로를 통해 전달할 수 있습니다.
    2. 데이터를 파일로 저장하고, 새로운 프로세스가 시작할 때 파일을 읽어 데이터를 로드합니다.
    * 프로세스가 종료되면, 데이터를 파일로 저장합니다.
    * 새로운 프로세스가 시작할 때, 파일을 읽어 데이터를 로드합니다.
    3. 데이터베이스를 사용하여 데이터를 저장하고, 새로운 프로세스가 시작할 때 데이터베이스에서 데이터를 읽어 로드합니다.
    * 프로세스가 종료되면, 데이터베이스에 데이터를 저장합니다.
    * 새로운 프로세스가 시작할 때, 데이터베이스에서 데이터를 읽어 로드합니다.

    다음은 예제 코드입니다.

    #hostingforum.kr
    php
    
    class MyProcess extends SwooleProcess {
    
        public function __construct($server, $fd, $fromId, $data) {
    
            $this->server = $server;
    
            $this->fd = $fd;
    
            $this->fromId = $fromId;
    
            $this->data = $data;
    
        }
    
    
    
        public function handle() {
    
            // 프로세스가 종료되면, 데이터를 파일로 저장합니다.
    
            file_put_contents('data.txt', json_encode($this->data));
    
        }
    
    }
    
    
    
    $server = new SwooleServer('127.0.0.1', 9501, SWOOLE_BASE);
    
    $server->set([
    
        'worker_num' => 4,
    
    ]);
    
    
    
    $server->on('Start', function ($server, $worker_id) {
    
        // 프로세스를 추가합니다.
    
        $server->addProcess(new MyProcess($server, $worker_id, 0, 'Hello, World!'));
    
    });
    
    
    
    $server->on('WorkerStart', function ($server, $worker_id) {
    
        // 프로세스가 종료되면, 새로운 프로세스를 생성합니다.
    
        $server->addProcess(new MyProcess($server, $worker_id, 0, file_get_contents('data.txt')));
    
    });
    
    
    
    $server->on('ProcessMessage', function ($server, $worker_id, $from_id, $data) {
    
        // 프로세스 간 통신을 사용하여 데이터를 전달합니다.
    
        echo "Worker $worker_id received message from worker $from_id: $datan";
    
    });
    
    
    
    $server->on('ProcessExit', function ($server, $worker_id, $exit_code) {
    
        // 프로세스가 종료되면, 새로운 프로세스를 생성합니다.
    
        $server->addProcess(new MyProcess($server, $worker_id, 0, file_get_contents('data.txt')));
    
    });
    
    
    
    $server->start();
    
    


    이 예제 코드는 프로세스가 종료되면, 새로운 프로세스를 생성하고, 기존 프로세스의 데이터를 파일로 저장하여 전달합니다.

    2025-05-07 11:27

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 17,458건 / 3 페이지

검색

게시물 검색