使用可变退避计时器轮询外部服务器的长 运行 脚本?
Long running script that polls external server with variable backoff timer?
我正在编写一个基于 Amphp 库的长 运行ning 脚本,它将轮询外部服务器以获取 运行 的任务列表,然后执行这些任务。
来自服务器的响应将是退避计时器,它将控制脚本何时发出下一个请求。
由于我对异步编程还很陌生,所以我尝试的方法不起作用。
我试图创建一个 \Amp\repeat() 有一个 \Amp\Pause(1000) 这样每次重复都会暂停 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() 被阻止,所以这违背了目的。
我正在使用 PHP 7.0 和来自 github master 分支的 Amphp。
\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 毫秒的正常循环。
[如果我误解了你的意思,请在评论中指出。]
我正在编写一个基于 Amphp 库的长 运行ning 脚本,它将轮询外部服务器以获取 运行 的任务列表,然后执行这些任务。
来自服务器的响应将是退避计时器,它将控制脚本何时发出下一个请求。
由于我对异步编程还很陌生,所以我尝试的方法不起作用。
我试图创建一个 \Amp\repeat() 有一个 \Amp\Pause(1000) 这样每次重复都会暂停 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() 被阻止,所以这违背了目的。
我正在使用 PHP 7.0 和来自 github master 分支的 Amphp。
\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 毫秒的正常循环。
[如果我误解了你的意思,请在评论中指出。]