我正在编写一个基于Amphp库的长期运行脚本,该脚本将轮询外部服务器以查找要运行的任务列表,然后执行这些任务。
来自服务器的响应将是退避计时器,它将控制脚本何时进行下一次请求。
由于我对异步编程很陌生,所以我正在尝试的不起作用。
我尝试创建一个\ Amp \ repeat(),它有一个\ Amp \ Pause(1000),这样每次重复都会暂停一秒钟。
这是我的测试代码:
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秒,而是每隔100ms(重复时间)运行一次回声。
过去我会用while循环和usleep()完成这个,但是因为usleep()阻塞了这个目的。
我正在使用来自github master branch的PHP 7.0和Amphp。
答案 0 :(得分:1)
\Amp\repeat
每100毫秒调用一次回调。
\Amp\execute(function () {
/* onSignal handler here for example */
new \Amp\Coroutine(function () {
while (1) {
/* dispatch request */
echo 'server request '.microtime(true).PHP_EOL;
yield new \Amp\Pause(100);
}
});
});
这是使用正常循环,仅在最后一次操作后持续100毫秒。
[如果我误解了你想要的是什么,请在评论中注明。]