1

以下代码摘自一个 pheanstalk 正在实现并正常工作的示例(从 pheanstalk 的 github 页面获得:https ://github.com/pda/pheanstalk ):

<?php

require_once("vendor/autoload.php");
use Pheanstalk\Pheanstalk;
$pheanstalk = new Pheanstalk('127.0.0.1');

// ------------ producer (queues jobs):

$pheanstalk
  ->useTube('testtube')
  ->put("job payload goes here\n");

// ------------ worker (performs jobs):

$job = $pheanstalk
  ->watch('testtube')
  ->ignore('default')
  ->reserve();

echo $job->getData();
$pheanstalk->delete($job);

// ------------ check server availability

$pheanstalk->getConnection()->isServiceListening(); // true or false

问题:

我不明白的是以下部分:

  1. 我假设producer代码中的换行符对执行没有任何影响,所以这一行是等价的:

    $pheanstalk->useTube('testtube')->put("job payload goes here\n");
    

正确的?如果这是真的,那么这些特定的函数调用是否必须按该顺序排列,或者它们可以按任何顺序排列?我之前对 php 中的函数和类的理解是,你可以直接从它的类类型的对象调用函数:$object->classFunction()但是,上面的代码是一种有效的 php 技术,你可以同时调用所有这些函数,还是对 pheanstalk 来说是特殊的?

  1. ignore('default')代码在做什么?

  2. $pheanstalk->getConnection()->isServiceListening();代码在做什么?

4

1 回答 1

1
  1. 你是正确的,空间是微不足道的。您所看到的称为方法链接

$pheanstalk->useTube('testtube')->put("job payload goes here\n");

相当于:

$temp = $pheanstalk->useTube('testtube');
$temp->put("job payload goes here\n");

因此,它首先调用useTube()指定有效载荷应放入哪个管中,然后将有效载荷放入其中。这取决于执行操作的方法返回Pheanstalk它们被调用的对象这一事实,因此它也简称为:

$pheanstalk->useTube('testtube');
$pheanstalk->put("job payload goes here\n");
  1. ignore(tubename)从监视列表中删除该管。默认情况下会监视该default管,因此这将禁用它并仅等待testtube管中的消息。

  2. 它完全按照上面的评论所说的那样做:检查服务器是否可用。您可以在您的生产者代码中使用它来报告错误,然后再尝试发送到未监听的 beanstalk 服务器。

于 2016-05-22T23:04:13.990 回答