PHP Gearman示例 - 缺失的链接?

时间:2013-12-28 07:01:13

标签: php gearman

没有一些示例显示如何在PHP中使用Gearman。一个典型的就像这样

**CLIENT**

<?php
  $client= new GearmanClient();
  $client->addServer();
  print $client->do("revit", "AlL THE World's a sTagE");
  print "\n";
?>

**SERVER**

<?php
   $worker= new GearmanWorker();
   $worker->addServer();
   $worker->addFunction("revit", "rev_it");
   while ($worker->work());

   function rev_it($job)
   {
      return strrev($job->workload());
   }
?>

我在我的64位CentOS服务器上安装了Gearmand和PECL PHP扩展,编写了这些脚本,确保Gearmand正在运行,然后浏览到客户端。浏览器等了....

我完全预料到这一点,因为我认为Gearman服务器需要知道它应该在收到适当的客户端请求时执行该特定的工作脚本。

我打开另一个标签并浏览到工作人员脚本,并立即在客户端脚本标签中找回了响应。

这里似乎缺少一个链接。当一个人写一个工人脚本时,它不是必须在Gearman服务器上注册,所以后者知道用它来为某些客户服务吗?

要么我一直在谷歌搜索错误的东西,否则所有那些“如何在PHP中使用Gearman”的例子都会遗漏一些东西。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:5)

你应该从控制台运行工作脚本(或者在GearmanManager或者supervisord(或者屏幕)之下),它将连接到gearmand,注册它的功能并等待工作交给它来自gearmand。

执行流程将是这样的:

在控制台终端中启动工作人员

GearmanWorker -> register function              -> gearmand

网络请求到达

browser       -> request page                   -> GearmanClient
GearmanClient -> perform this function          -> gearmand
gearmand      -> here, do this function         -> GearmanWorker
GearmanWorker -> here's the result              -> gearmand
gearmand      -> we're done, this is the result -> GearmanClient
GearmanClient -> return data to executing php   -> browser

希望这更能解释事情如何相互关联,以及为什么第一次没有得到结果,如果你没有工作人员实际在某处运行并在客户端被执行时注册了gearmand。