话不多说,直接上代码创建的子进程:publicfunction__construct(){$this->redis=Container::get(SwooleRedis::class);//获取异步redis以获得更高的性能$this->process=newswoole_process(function(swoole_process$process){return$this->process($process);},false,SOCK_DGRAM);$this->process->name('Test_Gateway');$this->process->useQueue();$this->process->start();//启动子进程}/***子进程处理逻辑*@paramswoole_process$process*/privatefunctionprocess(swoole_process$process){$client=newswoole_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("呃ror",function(swoole_client$cli)use($process){$process->write('error');});$client->on("close",function(swoole_client$cli)使用($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:/***@paramswoole_server$serv*@param$worker_id*/publicfunctiononWorkerStart(\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"Subprocessmessage:".$进程->读取()。PHP_EOL;});}}子进程的clientclient可以忽略。这个演示只是伪装管道通信的一个例子。如果使用管道,则不能使用消息队列:$process_push()和$process->pop();理论上可以实现在父子进程各注册一个event_loop。在收到其他后续补充的同时发送消息
