# Process 用户进程 ## 创建一个用户进程 ```php use Server\Components\Process\Process; class MyProcess extends Process { public function start($process) { } public function getData() { return '123'; } } ``` 继承Process类,实现start方法。 可以在start方法中创建异步连接池,或者定时器,或者异步客户端。 ```php if ($this->config->get('redis.enable', true)) { get_instance()->addAsynPool('redisPool', new RedisAsynPool($this->config, $this->config->get('redis.active'))); } if ($this->config->get('mysql.enable', true)) { get_instance()->addAsynPool('mysqlPool', new MysqlAsynPool($this->config, $this->config->get('mysql.active'))); } ``` ## 启动进程 在AppServer中添加进程 ```php /** * 用户进程 */ public function startProcess() { parent::startProcess(); ProcessManager::getInstance()->addProcess(MyProcess::class,true,1); //可以多次添加 ProcessManager::getInstance()->addProcess(MyProcess::class,true,2); } ``` 如果需要协程的支持请将第二个参数设置为true,默认支持协程。 如果相同的类名的进程需要设置额外的名称。 ``` addProcess($class_name, $needCoroutine = true, $name = '') ``` ## 进程间IPC SD为进程间的IPC提供了封装 ``` function getRpcCall($class_name, $oneWay = false, $name = '') ``` 用法很简单 ### IPC ``` $data = yield ProcessManager::getInstance()->getRpcCall(SDHelpProcess::class)->getData(ConsulHelp::DISPATCH_KEY); ``` ### oneway 这是一个单通道的访问 ``` ProcessManager::getInstance()->getRpcCall(ClusterProcess::class, true)->my_dispatchEvent($type, $data); ```