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

特此免费许可,任何人获得此软件及其相关文档文件(“软件”)的副本(“软件”),可不受限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并允许向提供软件的个人提供软件以进行此类操作,但受以下条件约束

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

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、适用于特定用途和侵权不保证。在任何情况下,作者或版权持有人均不对任何索赔、损害或其他责任负责,无论这些责任是合同责任、侵权责任或其他责任,无论这些责任是由于、来自或与软件或软件的使用或其他方式相关。