justblackbird/amphp-priority-emitter

具有优先级消息的异步发射器的内存实现

0.4.0 2020-08-22 12:19 UTC

This package is auto-updated.

Last update: 2024-09-22 21:57:27 UTC


README

Latest Stable Version Test

具有优先级消息的异步发射器的内存实现

原因

AMP Emitter 的实现后端是一个队列。它覆盖了许多情况,但有时需要一个优先级队列。

例如,你正在为社交网络或消息传递构建一个机器人。假设机器人可以响应用户的命令并向所有订阅者广播信息。这两种类型的信息具有不同的优先级。命令的响应必须尽快发送以保持用户体验的响应性,但广播信息可以稍后再处理。

你可以在消息总线周围构建应用程序。有些代码将消息推送到总线,有些代码从总线中取出并将它们传输到社交网络API。

你不能使用AMP附带的自带发射器,因为在这种情况下,广播消息将阻塞命令消息,因为在AMP Emitter中没有设置优先级的方法。

此库添加了一个具有类似AMP Emitter API的发射器,但具有优先级支持。

安装

composer require justblackbird/amphp-priority-emitter

用法

use Amp\Loop;
use JustBlackBird\AmpPriorityEmitter\Emitter;

// The following example will output:
// - important message
// - message one
// - message two

Loop::run(static function() {
    $emitter = new Emitter();

    $emitter->emit('message one', 0);
    $emitter->emit('message two', 0);
    $emitter->emit('important message', 5);
    $emitter->complete();

    $iterator = $emitter->iterate();
    while(yield $iterator->advance()) {
        echo "- " . $iterator->getCurrent() . "\n";        
    }
});

许可

MIT (c) Dmitry Simushev

实现基于 AMP Emitter.