进程

IMI 中对进程的创建和运行做了简单封装。

定义进程

  1. <?php
  2. namespace ImiDemo\HttpDemo\MainServer\Process;
  3. use Imi\Process\BaseProcess;
  4. use Imi\Process\Annotation\Process;
  5. /**
  6. * @Process("tp1")
  7. */
  8. class TestProcess extends BaseProcess
  9. {
  10. public function run(\Swoole\Process $process)
  11. {
  12. var_dump($this->data);
  13. sleep(3);
  14. var_dump('testProcess');
  15. }
  16. }

注解

@Process

  1. /**
  2. * 进程名称
  3. * @var string
  4. */
  5. public $name;
  6. /**
  7. * 重定向子进程的标准输入和输出。启用此选项后,在子进程内输出内容将不是打印屏幕,而是写入到主进程管道。读取键盘输入将变为从管道中读取数据。默认为阻塞读取。
  8. * @var boolean
  9. */
  10. public $redirectStdinStdout = false;
  11. /**
  12. * 管道类型,启用$redirectStdinStdout后,此选项将忽略用户参数,强制为1。如果子进程内没有进程间通信,可以设置为 0
  13. * @var int
  14. */
  15. public $pipeType = 2;

创建进程

通过注解中的进程名称创建进程,返回\Swoole\Process类型的对象,需要手动调用start()方法来运行进程。

  1. /**
  2. * 创建进程
  3. * 本方法无法在控制器中使用
  4. * 返回\Swoole\Process对象实例
  5. *
  6. * @param string $name
  7. * @param array $args
  8. * @param boolean $redirectStdinStdout
  9. * @param int $pipeType
  10. * @return \Swoole\Process
  11. */
  12. ProcessManager::create($name, $args = [], $redirectStdinStdout = null, $pipeType = null): \Swoole\Process

运行进程,同步阻塞等待进程执行返回

  1. /**
  2. * 运行进程,同步阻塞等待进程执行返回
  3. * 不返回\Swoole\Process对象实例
  4. * 执行失败返回false,执行成功返回数组,包含了进程退出的状态码、信号、输出内容。
  5. * array(
  6. * 'code' => 0,
  7. * 'signal' => 0,
  8. * 'output' => '',
  9. * );
  10. *
  11. * @param string $name
  12. * @param array $args
  13. * @param boolean $redirectStdinStdout
  14. * @param int $pipeType
  15. * @return array
  16. */
  17. ProcessManager::run($name, $args = [], $redirectStdinStdout = null, $pipeType = null)

运行进程,创建一个协程执行进程,无法获取进程执行结果

  1. /**
  2. * 运行进程,创建一个协程执行进程,无法获取进程执行结果
  3. * 执行失败返回false,执行成功返回数组,包含了进程退出的状态码、信号、输出内容。
  4. * array(
  5. * 'code' => 0,
  6. * 'signal' => 0,
  7. * 'output' => '',
  8. * );
  9. *
  10. * @param string $name
  11. * @param array $args
  12. * @param boolean $redirectStdinStdout
  13. * @param int $pipeType
  14. * @return void
  15. */
  16. ProcessManager::coRun($name, $args = [], $redirectStdinStdout = null, $pipeType = null)

运行进程,托管到 Manager 进程

这个用法只能在IMI.SERVERS.CREATE.AFTER事件中使用!

  1. /**
  2. * 挂靠Manager进程运行进程
  3. *
  4. * @param string $name
  5. * @param array $args
  6. * @param boolean $redirectStdinStdout
  7. * @param int $pipeType
  8. * @return void
  9. */
  10. public static function runWithManager($name, $args = [], $redirectStdinStdout = null, $pipeType = null)