进程

用途

处理耗时任务,比如处理死循环队列消费,清除多余redis中的token数据等等。

如何使用

在EasySwooleEvent注册进程。

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: yf
  5. * Date: 2018/5/28
  6. * Time: 下午6:33
  7. */
  8. namespace EasySwoole\EasySwoole;
  9. use App\Process\ProcessOne;
  10. use EasySwoole\EasySwoole\Swoole\EventRegister;
  11. use EasySwoole\EasySwoole\AbstractInterface\Event;
  12. use EasySwoole\Http\Request;
  13. use EasySwoole\Http\Response;
  14. class EasySwooleEvent implements Event
  15. {
  16. public static function initialize()
  17. {
  18. // TODO: Implement initialize() method.
  19. date_default_timezone_set('Asia/Shanghai');
  20. }
  21. public static function mainServerCreate(EventRegister $register)
  22. {
  23. // TODO: Implement mainServerCreate() method.
  24. /**
  25. * 除了进程名,其余参数非必须
  26. */
  27. $myProcess = new ProcessOne("processName",time(),false,2,true);
  28. ServerManager::getInstance()->getSwooleServer()->addProcess($myProcess->getProcess());
  29. }
  30. public static function onRequest(Request $request, Response $response): bool
  31. {
  32. // TODO: Implement onRequest() method.
  33. return true;
  34. }
  35. public static function afterRequest(Request $request, Response $response): void
  36. {
  37. // TODO: Implement afterAction() method.
  38. }
  39. }

Process类:

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: yf
  5. * Date: 2019-03-05
  6. * Time: 20:08
  7. */
  8. namespace App\Process;
  9. use EasySwoole\Component\Process\AbstractProcess;
  10. use EasySwoole\EasySwoole\Logger;
  11. class ProcessOne extends AbstractProcess
  12. {
  13. public function run($arg)
  14. {
  15. // TODO: Implement run() method.
  16. Logger::getInstance()->console($this->getProcessName()." start");
  17. while (1){
  18. \co::sleep(5);
  19. Logger::getInstance()->console($this->getProcessName()." run");
  20. }
  21. }
  22. public function onShutDown()
  23. {
  24. // TODO: Implement onShutDown() method.
  25. }
  26. public function onReceive(string $str)
  27. {
  28. // TODO: Implement onReceive() method.
  29. }
  30. }

核心对象方法

核心类:EasySwoole\Component\Process\AbstractProcess。

构造函数,创建子进程

  • string $processName 设置进程名字
  • mixed $arg 设置参数
  • bool $redirectStdinStdout 重定向子进程的标准输入和输出。启用此选项后,在子进程内输出内容将不是打印屏幕,而是写入到主进程管道。读取键盘输入将变为从管道中读取数据。默认为阻塞读取。
  • mixed $pipeType 管道类型,启用$redirect_stdin_stdout后,此选项将忽略用户参数,强制为1。如果子进程内没有进程间通信,可以设置为 0
  • bool $enableCoroutine 默认为false,在callback function中启用协程,开启后可以直接在子进程的函数中使用协程

final function __construct(string $processName,$arg = null,$redirectStdinStdout = false,$pipeType = 2,$enableCoroutine = false)

设置最大等待时间

  • int $maxExitWaitTime 设置最大等待时间
    public function setMaxExitWaitTime(int $maxExitWaitTime)

获取当前进程

public function getProcess():Process

在进程内添加定时器,返回定时器序号

  • int $ms 设置定时器时间
  • callable $call 设置回调函数

public function addTick($ms,callable $call):?int

清除进程内的定时器

  • int $timerId 定时器序号

public function clearTick(int $timerId):?int

在进程内添加延时定时器,返回定时器序号

  • int $ms 设置延时时间
  • callable $call 设置回调函数

public function delay($ms,callable $call):?int

获取子进程pid

public function getPid():?int

获取子进程pid

  • Process $process 进程类

执行进程任务

function __start(Process $process)

获取参数

public function getArg()

获取进程名称

public function getProcessName()

异常

protected function onException(\Throwable $throwable)

进程任务

  • mixed $arg 参数

public abstract function run($arg)

子进程关闭处理函数

public abstract function onShutDown()

进程通信

  • string $str 通信数据

public abstract function onReceive(string $str)