justblackbird / amphp-priority-emitter
具有优先级消息的异步发射器的内存实现
0.4.0
2020-08-22 12:19 UTC
Requires
- php: ^7.4
- amphp/amp: ^2.4
- justblackbird/stable-priority-queue: ^0.1.0
- react/promise: ^2
Requires (Dev)
- amphp/phpunit-util: ^1.4
- phpunit/phpunit: ^9.2
- squizlabs/php_codesniffer: ^3.5
- vimeo/psalm: ^3.12
This package is auto-updated.
Last update: 2024-09-22 21:57:27 UTC
README
具有优先级消息的异步发射器的内存实现
原因
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.