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 に答える