kicken / gearman-php
Gearman 协议的 PHP 实现。
Requires
- php: >=5.4.0
This package is auto-updated.
Last update: 2024-09-19 19:43:00 UTC
README
此库提供了一个 gearman 协议的纯 PHP 实现,用于创建客户端和工作者。它为不总是可用的 PHP 扩展提供了一个替代方案。
此库不是现有扩展的替代品。此库提供了一个替代且不兼容的 API。
安装
只需使用 composer 安装 kicken/gearman-php 包,即可安装最新版本。
composer require kicken/gearman-php
快速入门指南
以下是设置工作者、提交作业和获取作业状态的快速入门指南。有关 API 的完整详细信息,请查看源代码并四处查看。
工作者
创建工作者涉及将不同的回调函数注册到 Worker 类的实例中,然后调用 work 方法以开始接受和执行工作。例如
<?php
$worker = new \Kicken\Gearman\Worker('127.0.0.1:4730');
$worker
->registerFunction('rot13', function(\Kicken\Gearman\Job\WorkerJob $job){
$workload = $job->getWorkload();
echo "Running rot13 task with workload {$workload}\n";
return str_rot13($workload);
})
->work()
;
提交作业
可以使用 Client 类和 submitJob 或 submitBackgroundJob 函数将作业提交给工作者。例如
$client = new \Kicken\Gearman\Client('127.0.0.1:4730');
$job = $client->submitBackgroundJob('rot13', 'Foobar');
echo $job;
后台作业无法向提交作业的客户端提供任何数据。可以从后台作业中获取的唯一信息是通过使用 getJobStatus 函数获取的状态。
非后台作业在处理过程中能够将结果或其他数据返回给客户端。客户端需要等待作业完成才能访问这些数据。这可以通过使用 wait 函数实现。
有两种方式可以获取非后台作业的信息。首先,客户端可以等待它完成,然后从作业对象中访问信息。
$client = new \Kicken\Gearman\Client('127.0.0.1:4730');
$job = $client->submitJob('rot13', 'Foobar');
$client->wait();
echo $job->getResult();
其次,客户端可以注册不同的回调,这些回调将在信息可用时执行。
$client = new \Kicken\Gearman\Client('127.0.0.1:4730');
$job = $client->submitJob('rot13', 'Foobar');
$job->onStatus(function(\Kicken\Gearman\Job\ClientJob $job){
echo $job->getProgressPercentage()."% complete\n";
})->onComplete(function(\Kicken\Gearman\Job\ClientJob $job){
echo $job->getResult();
});
$client->wait();
检查作业状态
如果您将后台作业的句柄保存起来,您可以使用 getJobStatus 函数来检查其状态,以确定何时完成以及进度如何(如果工作者提供进度信息)。
$client = new \Kicken\Gearman\Client('127.0.0.1:4740');
$status = $client->getJobStatus($jobHandle); //previously saved $jobHandle
$client->wait();
var_dump($status->isKnown(), $status->isRunning(), $status->getNumerator(), $status->getDenominator());
超时
客户端和工作者都有可配置的超时设置。超时值仅控制网络通信以及客户端或工作者将等待来自服务器数据的时间。默认情况下没有超时,因此客户端和工作者将等待网络所需的时间。
要为工作者和客户端配置超时,请调用 setTimeout 方法并给出毫秒或布尔值 true/false 的超时。指定 false 将允许代码无限期地等待。指定 true 将使用 PHP 的 default_socket_timeout ini 设置。