自定义进程类-完整示例代码
<?php
namespace box\process;
use design\AbstractProcess;
class Demo extends AbstractProcess
{
/**
* 进程名称
*/
public $name = 'diy-process';
/**
* 是否需要while(true) 永久堵塞
*/
public $onWhile = false;
/**
* 等待间隔时间(毫秒) 0不堵塞
*/
public $sleepS = 0;
/**
* 重定向自定义进程的标准输入和输出
*/
public $redirectStdinStdout = false;
/**
* 管道类型
*/
public $pipeType = 2;
/**
* 是否启用协程
*/
public $enableCoroutine = true;
// 进程逻辑接口方法
public function run() {
// 该方法必须创建,但可留空
}
// 业务入口执行前的前置方法
public function front() {
// 如果返回false,run()则不会执行,while(true)也会终止
return true;
}
// 接收管道数据接口方法
public function read($process) {
// 必须使用read()接收投递的数据,就算你不使用该数据,否则Swoole底层会堵塞进程。
$data = $process->read();
// 你的业务代码...
}
// 业务进程发生异常时回调
public function onException(\Throwable $throwable)
{
// $throwable->getMessage(); 错误内容
// $throwable->getFile(); 错误文件
// $throwable->getLine(); 错误行数
}
// 当进程接收到 SIGTERM 信号触发该回调
public function onSigTerm() {
// 这里可以做一些进程释放的业务逻辑
}
}