
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