webman如何实现 主动阻塞

4yop

问题描述

如何实现 for sleep ?

public function index(Request $request)
    {
        $counter = 0;
        for ($i = 1; $i <= 10; $i++) {
            sleep(1);
            $counter++;
        }
        return $counter;
    }
971 2 3
2个回答

ersic

用官方的限速器

  • 4yop 2025-04-14

    只是想请求迟点返回呢?

walkor 打赏

worekrman 5.1支持 Timer::sleep(); ,支持延迟当前请求,但不阻塞进程。

composer require revolt/event-loop

设置
config/process.php 里webman进程的

'eventLoop' => Workerman\Events\Fiber::class,
use Workerman\Timer;

public function index(Request $request)
    {
        $counter = 0;
        for ($i = 1; $i <= 10; $i++) {
            Timer::sleep(1);
            $counter++;
        }
        return $counter;
    }
  • Le 2025-07-19

    老大,如果不使用event-loop 是不是这个进程就会阻塞,我想在队列进程里使用这个,会导致这个队列进程整个阻塞吗?

  • qqxxr 2025-07-19

    延迟队列能解决你的需求吗?

  • Le 2025-07-19

    不能。。因为是在队列里面请求远程的部分代码,对方限流,然后可能会处理延迟一下,除非把请求远程再放个队列,但是改动有点大

🔝