创建的子进程:
public function __construct()
{
$this->redis = Container::get(SwooleRedis::class);//获取异步redis获取更高性能
$this->process = new swoole_process(function (swoole_process $process) {
return $this->process($process);
}, false, SOCK_DGRAM);
$this->process->name('Test_Gateway');
$this->process->useQueue();
$this->process->start();//启动子进程
}
/**
* 子进程处理逻辑
* @param swoole_process $process
*/
private function process(swoole_process $process)
{
$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC); //异步非阻塞
$client->on("connect", function (swoole_client $cli) use ($process) {
$process->write('connected');
});
$client->on("receive", function (swoole_client $cli, $data) use ($process) {
$process->write($data);
});
$client->on("error", function (swoole_client $cli) use ($process) {
$process->write('error');
});
$client->on("close", function (swoole_client $cli) use ($process) {
$process->write('close');
});
if ($client->connect('127.0.0.1', 90, -1)) {
} else {
$process->write('网关连接失败');
}
swoole_event_add($process->pipe,
function ($pipe) use ($process, $client) {//读取父进程管道消息
$client->send($process->read());
});
}
父进程onWorkerStart:
/**
* @param swoole_server $serv
* @param $worker_id
*/
public function onWorkerStart(\swoole_server $serv, $worker_id)
{
if ($worker_id === 0) {
swoole_timer_tick(1000, function () {
$this->process->write('ping');
});
$process = $this->process;
swoole_event_add($process->pipe,
function ($pipe) use ($process) {//获取子进程的管道消息
echo "子进程消息:" . $process->read() . PHP_EOL;
});
}
}