• Invoker
    • 实现代码
    • 使用实例
      • 限制函数执行时间

    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. }