gpt4 book ai didi

php - react loop->addPeriodicTimer 的最大间隔为 2147 秒

转载 作者:行者123 更新时间:2023-12-04 16:13:39 26 4
gpt4 key购买 nike

我在 Ratchet wamp 应用程序上使用 react\eventloop 运行计时器。我希望它以 3600 秒每小时运行一次,但出于某种原因,如果我将间隔设置为高于 2147 秒,我会收到此警告:

Warning: stream_select(): The microseconds parameter must be greater than 0 in C
:\wamp\www\vendor\react\event-loop\StreamSelectLoop.php on line 255

2147 秒有什么特别之处?我该怎么做才能绕过这种限制?

事件处理程序
class Pusher implements WampServerInterface, MessageComponentInterface {   
private $loop;
}

public function __construct(LoopInterface $loop) {
$this->loop = $loop;

$this->loop->addPeriodicTimer(2147, function() {
//code
});
}

public function onSubscribe(ConnectionInterface $conn, $topic) {}
public function onUnSubscribe(ConnectionInterface $conn, $topic) {}
public function onOpen(ConnectionInterface $conn) {}
public function onClose(ConnectionInterface $conn) {}
public function onCall(ConnectionInterface $conn, $id, $topic, array $params) {}
public function onPublish(ConnectionInterface $conn, $topic, $event {}
public function onError(ConnectionInterface $conn, \Exception $e) {}

服务器
$loop = Factory::create(); 

$webSock = new Server($loop);
$webSock->listen(8080, '0.0.0.0');

new IoServer(
new HttpServer(
new WsServer(
new SessionProvider(
new WampServer(
new Pusher($loop)),
$sesshandler
)
)

),
$webSock
);

$loop->run();

最佳答案

这是因为 PHP 整数在 32 位平台上的限制。

2147(秒)* 1000000(一秒内的微秒数)~= PHP_INT_MAX 在 32 位平台上。
在 64 位平台上,该限制约为 30 万年。

奇怪的是 React 的 React\EventLoop\StreamSelectLoop电话stream_select()只有微秒参数,同时它也接受秒。也许他们应该解决这个问题。作为解决方法,您可以覆盖 StreamSelectLoop实现以便它利用 $tv_sec stream_select() 中的参数.

我创建了一个 pull request ,看看能不能接受

关于php - react loop->addPeriodicTimer 的最大间隔为 2147 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25029559/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com