【问题标题】:pheanstalk and beanstalk functionspheanstalk 和 beanstalk 函数
【发布时间】:2016-09-19 03:15:17
【问题描述】:

以下代码摘自一个 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-&gt;classFunction(),但是上面的代码是一种有效的 php 技术,您可以同时调用所有这些函数还是什么尤其是野鸡?

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

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

【问题讨论】:

    标签: php beanstalkd pheanstalk


    【解决方案1】:
    1. 你说得对,空格是微不足道的。你看到的叫做method chaining

    $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 服务器。

    【讨论】:

      猜你喜欢
      • 2014-01-23
      • 2013-03-04
      • 2016-09-19
      • 1970-01-01
      • 2022-01-19
      • 2013-07-31
      • 2017-05-24
      • 2016-09-21
      相关资源
      最近更新 更多