进程池

IMI 中对进程池的创建和运行做了简单封装,基于Swoole\Process\Pool实现。

定义进程池

  1. <?php
  2. namespace XinchengApi\api\ProcessPool;
  3. use Imi\Process\Annotation\ProcessPool;
  4. /**
  5. * @ProcessPool(name="进程名称")
  6. */
  7. class Sms extends \Imi\Process\BasePoolProcess
  8. {
  9. public function run(\Swoole\Process\Pool $pool, int $workerId, $name, $workerNum, $args, $ipcType, $msgQueueKey)
  10. {
  11. // 做一些事情
  12. }
  13. }

注解

@ProcessPool

  1. /**
  2. * 进程池名称
  3. * @var string
  4. */
  5. public $name;
  6. /**
  7. * 进程数量
  8. *
  9. * @var int
  10. */
  11. public $workerNum = 1;
  12. /**
  13. * 进程间通信的模式,默认为0表示不使用任何进程间通信特性
  14. *
  15. * @var integer
  16. */
  17. public $ipcType = 0;
  18. /**
  19. * 消息队列key
  20. *
  21. * @var string
  22. */
  23. public $msgQueueKey = null;

创建进程池

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

  1. /**
  2. * 创建进程池
  3. * 本方法无法在控制器中使用
  4. * 返回\Swoole\Process\Pool对象实例
  5. *
  6. * @param string $name
  7. * @param int $workerNum 指定工作进程的数量
  8. * @param array $args
  9. * @param int $ipcType 进程间通信的模式,默认为0表示不使用任何进程间通信特性
  10. * @param string $msgQueueKey
  11. * @return \Swoole\Process\Pool
  12. */
  13. public static function create($name, $workerNum = null, $args = [], $ipcType = 0, $msgQueueKey = null): \Swoole\Process\Pool