walkor / walkor/workerman

Question. Is there method to change child processes from master process?

Open
#1,057 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
PHP
Stars
11.6k
Forks
2.2k
Avg merge
11h 30m
Merged PRs (30d)
3

Description

there is a need to create child processes dynamically. For example, for network connections to other network services as one process per service

I tried that:

```
use \Workerman\Worker;
use \Workerman\Lib\Timer;

Timer::add(0.001,function(){
echo 'master worker',PHP_EOL;
$event = new Worker();
$event->onWorkerStart = function($worker){
echo 'master worker2',PHP_EOL;
\Workerman\Channel\Client::connect('127.0.0.1');
\Workerman\Channel\Client::on('createChild', function($data){
echo $data,PHP_EOL;
Worker::forkOneWorkerForLinux(startWorker());
});
};
$event->run();
},[],false);
function startWorker($timer=false){
$event = new Worker();
$event->name = 'Checker-of-services';
$event->count = 1;
if($timer){
$event->onWorkerStart = function($worker){
echo 'start worker',PHP_EOL;
\Workerman\Channel\Client::connect('127.0.0.1');
Timer::add(30,function(){
echo 'add worker',PHP_EOL;
echo \Workerman\Channel\Client::publish('createChild', 'dataForNewChildProcess'),PHP_EOL;
},[],false);
};
}
return $event;
}
startWorker(1);

if(sizeof(Worker::getAllWorkers())){
Worker::runAll();
}
else echo 'No workers',PHP_EOL;
```

but this code not run second child process (many errors)
and stopping master not working, maybe because of "\Workerman\Channel\Client::on" in master

PS: my local code of "Worker::forkOneWorkerForLinux" is "public static function"

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.