Invoker

EasySwoole为了让框架支持函数超时处理,封装了一个Invoker。


参数列表:

  1. $callable 可执行回调函数
  2. $timeOut 超时时间,单位为 `微秒` 1s = 1 * 1000 * 1000μs `默认值100 * 1000`
  3. ...$params 可变参数

实现代码

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: yf
  5. * Date: 2018/5/24
  6. * Time: 下午4:12
  7. */
  8. namespace EasySwoole\Component;
  9. use \Swoole\Process;
  10. class Invoker
  11. {
  12. public static function exec(callable $callable,$timeOut = 100 * 1000,...$params)
  13. {
  14. pcntl_async_signals(true);
  15. pcntl_signal(SIGALRM, function () {
  16. Process::alarm(-1);
  17. throw new \RuntimeException('func timeout');
  18. });
  19. try
  20. {
  21. Process::alarm($timeOut);
  22. $ret = call_user_func($callable,...$params);
  23. Process::alarm(-1);
  24. return $ret;
  25. }
  26. catch(\Throwable $throwable)
  27. {
  28. throw $throwable;
  29. }
  30. }
  31. }

使用实例

限制函数执行时间

  1. try{
  2. \EasySwoole\Component\Invoker::exec(function (){
  3. sleep(2);
  4. });
  5. }catch (\Throwable $throwable){
  6. echo $throwable->getMessage();
  7. }