> hyperf/process 可以添加一個用戶自定義的工作進程,此函數通常用于創建一個特殊的工作進程,用于監控、上報或者其他特殊的任務。在 Server 啟動時會自動創建進程,并執行指定的子進程函數,進程意外退出時,Server 會重新拉起進程。
> 比如定時器就是使用該方式實現的自定義進程,可以參考其代碼
[TOC]
## 創建一個自定義進程
~~~
declare(strict_types=1);
namespace App\Process;
use Hyperf\Process\AbstractProcess;
use Hyperf\Process\Annotation\Process;
use Hyperf\Contract\StdoutLoggerInterface;
class DemoProcess extends AbstractProcess
{
public function handle(): void
{
$logger = $this->container->get(StdoutLoggerInterface::class);
while (true) {
$logger->warning('new date2: ' . date('Y-m-d H:i:s'));
sleep(1);
}
}
}
~~~
## 配置文件方式注冊
> 配置文件:/config/autoload/processes.php
~~~
return [
\App\Process\DemoProcess::class,
];
~~~
## 注解方式注冊 (推薦)
> 只需在自定義進程類上定義 @Process 注解,Hyperf 會收集并自動完成注冊工作
~~~
declare(strict_types=1);
namespace App\Process;
use Hyperf\Process\AbstractProcess;
use Hyperf\Process\Annotation\Process;
use Hyperf\Contract\StdoutLoggerInterface;
/**
* @Process(name="demo_process")
*/
class DemoProcess extends AbstractProcess
{
public function handle(): void
{
$logger = $this->container->get(StdoutLoggerInterface::class);
while (true) {
$logger->warning('new date2: ' . date('Y-m-d H:i:s'));
sleep(1);
}
}
}
~~~