使用PHP和Gearman检测没有可用的服务器

时间:2011-10-31 16:17:33

标签: php gearman

我目前正在使用Gearman使用标准绑定(docs here)。一切运作正常,但我有一个小问题,无法检测何时对GearmanClient :: addServer(docs here)的调用是“成功”,我的意思是......

问题是添加服务器不会尝试套接字I / O,这意味着服务器可能实际上不存在或无法运行。这意味着后续代码调用(在服务器实际上不存在的情况下)失败并导致PHP警告

在添加之前或之后确认Gearman守护程序在服务器上是否可操作有什么方法或最佳方法是什么?

我想实现这一点,以便我可以可靠地处理Gearman可能已经死亡的情况,或者服务器可能无法接触......

非常感谢。

2 个答案:

答案 0 :(得分:0)

我们首先尝试通过手动调用主机上的fsockopen和传递给addServer的端口,但事实证明这可能会留下很多悬挂连接,因为Gearman服务器期望发生一些事情那个插座。

我们使用监视器脚本来检查守护程序及其工作人员的状态 - 类似于this perl script on Google Groups。我们修改了脚本,以便在守护程序未运行时重新启动守护程序。

如果这不具有吸引力,请查看Gearman Protocol(特别是“管理协议”部分,在上面的线程中引用)并使用status命令。这将为您提供有关作业和工作人员状态的信息,但也意味着您可以执行与守护程序的套接字连接,而不是让它挂起。

答案 1 :(得分:0)

您可以使用此库:https://github.com/necromant2005/gearman-stats 它没有外部依赖。

$adapter = new \TweeGearmanStat\Queue\Gearman(array(
    'h1' => array('host' => '10.0.0.1', 'port' => 4730, 'timeout' => 1),
    'h2' => array('host' => '10.0.0.2', 'port' => 4730, 'timeout' => 1),
));
$status = $adapter->status();
var_dump($status);