react-parallel/event-loop

🌀🌉🌀 将事件循环桥接到 ext-parallel 事件

1.2.0 2020-12-19 16:47 UTC

README

Continuous Integration Latest Stable Version Total Downloads Type Coverage License

安装

要通过 Composer 安装,请使用以下命令,它将自动检测最新版本并将其与 ~ 绑定。

composer require react-parallel/event-loop

使用方法

设置

就像 ReactPHP 事件循环一样,您应该只有一个桥梁。您可以有多个,但与 ReactPHP 事件循环不同,这将是可行的,但当你有超过几个时,它将增加额外的开销。为不同的主要上下文保留几个。共享此桥梁,以便其他包可以使用它们,并且只有一个实例检查事件。

use React\EventLoop\Factory;
use ReactParallel\EventLoop\EventLoopBridge;

$loop = Factory::create();
$eventLoopBridge = new EventLoopBridge($loop);

$loop->run();

通道

通道通常有消息流通过它们,因此桥梁将它们转换为可观察对象。

use parallel\Channel;
use React\EventLoop\Factory;
use ReactParallel\EventLoop\EventLoopBridge;

$loop = Factory::create();
$eventLoopBridge = new EventLoopBridge($loop);

$channel = new Channel(Channel::Infinite);
$eventLoopBridge->observe($channel)->subscribe(function (string $message) {
    echo $message, PHP_EOL;
});

$loop->futureTick(function () use ($channel): void {
    $channel->send('Hello World!');
    $channel->close();
});

$loop->run();

未来

承诺是推送的,而未来是拉取的,因此事件循环将在有结果可用时轮询并解决承诺。

use parallel\Channel;
use React\EventLoop\Factory;
use ReactParallel\EventLoop\EventLoopBridge;
use function parallel\run;

$loop = Factory::create();
$eventLoopBridge = new EventLoopBridge($loop);

$future = run(function (): string {
    return 'Hello World!';
});

$channel = new Channel(Channel::Infinite);
$eventLoopBridge->await($future)->then(function (string $message) {
    echo $message, PHP_EOL;
});

$loop->run();

度量

此包通过 wyrihaximus/metrics 支持度量。

use React\EventLoop\Factory;
use ReactParallel\EventLoop\EventLoopBridge;
use ReactParallel\EventLoop\Metrics;
use WyriHaximus\Metrics\Configuration;
use WyriHaximus\Metrics\InMemory\Registry;

$loop = Factory::create();
$eventLoopBridge = (new EventLoopBridge($loop))->withMetrics(Metrics::create(new Registry(Configuration::create())));

贡献

有关详细信息,请参阅 CONTRIBUTING

许可

版权所有 2024 Cees-Jan Kiewiet

兹特此授予任何获取此软件及其相关文档副本(“软件”)的人免费使用该软件的权利,不受任何限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,并允许向提供软件的人提供这样做,但受以下条件约束

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任负责,无论源于合同、侵权或其他原因,与软件或软件的使用或其他交易有关。