adamnicholson / kyew
此包的最新版本(0.2.0)没有可用的许可证信息。
0.2.0
2017-05-28 20:01 UTC
Requires
- jeremeamia/superclosure: ~2.1
Requires (Dev)
- illuminate/queue: ^5.2
- phpunit/phpunit: ^5.2
- predis/predis: ^1.0
- symfony/var-dumper: ^3.0
README
Kyew 是在现有的 队列 包之上的一层薄层,允许你将任务推送到队列中并等待任务完成。
以下是一些可能有用的情况示例
- 并发执行多个任务
- 将资源密集型任务推送到性能更优的服务器
需求
- PHP7.0+
- 队列包(参见 支持的队列包)
示例
等待单个任务
$task = $kyew->async(function () { // Do some slow I/O operation return 'foo'; }); $response = $task->await(); // (string) "foo"
同时执行多个任务
$google = $kyew->async(function () { return file_get_contents('http://google.com'); }); $bbc = $kyew->async(function () { return file_get_contents('http://bbc.co.uk'); }); // Both closures have already started executing in the background $google->await(); // (string) HTML source for Google's homepage $bbc->await(); // (string) HTML source for BBC's homepage
工作原理
当任务传递给 $task = $kyew->async($task)
时,它们立即转交给底层的队列包,并附带一条额外指令,将任务返回值存储回持久层(例如,数据库)。
调用 $task->await()
时,我们只是简单地在一个循环中等待,直到该值出现在持久层或达到超时阈值。
安装
可以使用 Composer 安装 Kyew
composer require adamnicholson/kyew
Kyew 有两个依赖项
- 一个队列驱动程序,它 实现了
Kyew\Queue
接口);用于将工作推送到你的队列 - 一个 pub-sub 驱动程序,它 实现了
Kyew\PubSub
接口);用于在进程之间传递数据
以下示例使用 InMemoryPubSub
和 SynchronousQueue
队列 - 你应该使用适合你环境的实现。
$pubsub = new Kyew\PubSub\InMemoryPubSub; $kyew = new Kyew\Kyew( $pubsub, new Kyew\Queue\SynchronousQueue($pubsub) ); $task = $this->kyew->async(function () { return 'Some return value!!!'; }); echo $task->await(); // string 'Some return value!!!'
API
Kyew::async(callable $task): Task
async
接受一个可调用参数作为其唯一参数,并返回一个 Task
实例。
$task = $kyew->async(function () { // Do some slow I/O operation return 'foo'; });
可调用参数立即转交给队列库执行。`Task` 实例将监听队列进程,并在可调用参数执行完毕时通知。
Task::await(): void
await
将阻塞代码执行,直到给定的 Task 完成执行。
$response = $task->await(); echo $response; // (string) "foo"
支持的队列包
IlluminateQueue
:在 Laravel 的(Illuminate)队列包中执行任务SynchronousQueue
:在当前进程中同步执行任务,主要用于测试
支持持久层
DatabasePubSub
:将任务返回值存储在兼容PDO
的 SQL 数据库中RedisPubSub
:将任务返回值存储在 redis 服务器中InMemoryPubSub
:将任务返回值存储在内存中的 PHP 数组中,主要用于测试
贡献
我们欢迎对 Kyew 的任何贡献。它们可以通过 GitHub 问题或拉取请求来完成。
许可证
Kyew 在 MIT 许可证下授权
作者
Adam Nicholson - adamnicholson10@gmail.com