此包的最新版本(0.2.0)没有可用的许可证信息。

0.2.0 2017-05-28 20:01 UTC

This package is auto-updated.

Last update: 2024-09-17 22:39:46 UTC


README

Build Status

Kyew 是在现有的 队列 包之上的一层薄层,允许你将任务推送到队列中并等待任务完成。

以下是一些可能有用的情况示例

  • 并发执行多个任务
  • 将资源密集型任务推送到性能更优的服务器

需求

示例

等待单个任务

$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 有两个依赖项

以下示例使用 InMemoryPubSubSynchronousQueue 队列 - 你应该使用适合你环境的实现。

$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