php - 当 PHP Gearman 客户端无法连接到服务器时,我得到与无法获取新作业时相同的代码

标签 php gearman

PHP Gearman 工作线程从服务器检索任务。当我们没有任何新任务时,我们会在后台执行一些其他工作。请检查下面的实现。

$worker = new GearmanWorker();
$worker->addServer('host', 123);
$worker->addFunction('name', array($this, 'function'));
$worker->setTimeout(5000);

while ($worker->work() || GEARMAN_TIMEOUT == $worker->returnCode()) {
    if (GEARMAN_TIMEOUT == $worker->returnCode()) {
        $this->handleTimeout();
    } elseif (GEARMAN_SUCCESS != $worker->returnCode()) {
        $this->handleFail();
        break;
    }
}

代码看起来非常简单,并且大多数情况下都可以正常工作。但是,当由于某种原因脚本无法连接到服务器时,$worker->returnCode() 等于GEARMAN_TIMEOUT

$worker->returnCode() 值相同

  • 当我们没有任何新任务时
  • 当脚本无法连接到服务器时

当脚本无法连接到服务器时,错误消息和代码如下:

  • $worker->error()

    gearman_worker_grab_job(GEARMAN_TIMEOUT) 选项超时返回已达到 -> libgearman/worker.cc:869

  • $worker->getErrno()

    0

当客户端无法连接到服务器时如何捕获错误?

最佳答案

我们添加了GearmanWorker::echo()调用以检查 Gearman 服务器是否可用。

查看修改后的代码

$worker = new GearmanWorker();
$worker->addServer('host', 123);
$worker->addFunction('name', array($this, 'function'));
$worker->setTimeout(5000);

while ($worker->work() || GEARMAN_TIMEOUT == $worker->returnCode()) {
    if (GEARMAN_TIMEOUT == $worker->returnCode()) {
        $this->handleTimeout();
        $echo = @$worker->echo(1);
        if (!$echo) {
            echo 'Failed to connect to Gearman Gerver.'. PHP_EOL;
            break;
        }
    } elseif (GEARMAN_SUCCESS != $worker->returnCode()) {
        $this->handleFail();
        break;
    }
}

请注意行 $echo = @$worker->echo(1); 并检查以下内容。如果服务器不可用,则 echo() 输出 PHP 警告并返回 false

GearmanException永远不会被扔进我们的设置中。

关于php - 当 PHP Gearman 客户端无法连接到服务器时,我得到与无法获取新作业时相同的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16815420/

相关文章:

javascript - 如何在 PHP(Laravel) 中生成 Cloudinary 身份验证签名

php - Apache SOLR HttpTransportException

php - 切换到 SSL 后登录 PHP session

Python gearman 基本示例错误

php - 如何用Gearman实现循环任务列表?

php - 两个盒子,两个最大值 - 但不设置哪个值属于哪个盒子

php - 如何在字符串中搜索数千个可能的关键字

php - 学说可以有多个到数据库的连接吗?

php - Windows cygwin gearman ./configure 显示 "configure: error: Unable to find libevent"错误

mysql - Gearman 和 MySQL 与 Homebrew 编译错误