我正在编写一个基于 Amphp 库的长时间运行脚本,它将轮询外部服务器以获取要运行的任务列表,然后执行这些任务。
在来自服务器的响应中将是退避计时器,它将控制脚本何时发出下一个请求。
由于我对异步编程很陌生,所以我正在尝试的东西不起作用。
我试图创建一个具有 \Amp\Pause(1000) 的 \Amp\repeat() 以便每次重复都会暂停 1 秒。
这是我的测试代码:
function test() {
// http request goes here...
echo 'server request '.microtime(true).PHP_EOL;
// based on the server request, change the pause time
yield new \Amp\Pause(1000);
}
Amp\execute(function () {
\Amp\onSignal(SIGINT, function () {
\Amp\stop();
});
\Amp\repeat(100, function () {
yield from test();
});
});
我预计会发生的是,在每次重复时,test() 函数会在回声后暂停 1 秒,但回声每 100 毫秒(重复时间)运行一次。
在过去,我会使用 while 循环和 usleep() 来完成此操作,但由于 usleep() 阻止了此操作,因此无法达到目的。
我正在使用来自 github master 分支的 PHP 7.0 和 Amphp。