これで、単純なギアマン システムが実行され、ワーカーが実行されました。
ワーカーは基本的にペイロード (この場合は乱数であり、画面にエコー バックすることになっています) を受け取るだけです。文字通りecho
、クライアントには返されません。
クライアントは乱数を送信します。を実行しようとしていますが、毎回$client->doBackground( 'post', 65482, md5(uniqid()));
47 エラー ( ) が返されます。GEARMAN_TIMEOUT
getErrNo()
0 をerror()
返す、何かを返すGEARMAN_TIMEOUT
ただし、 just$client->do(blah, blah, blah)
に変更すると、問題なく動作します。
タイムアウトエラーが発生した後でも、ワーカーがまだ番号をエコーしている場所を時々見ました...
public function execute()
{
$method = 'do';
if( !$this->getBlock() )
{
$method .= ( $this->getPriority() == 'Normal' ? '' : $this->getPriority() ) . 'Background';
}
else
{
$method .= $this->getPriority();
}
echo "Method: $method \t Worker: {$this->getName()} \t Payload: {$this->getPayload()} \t Hash: {$this->getHash()}\n";
$this->setResult(
$this->getClient()
->$method(
$this->getName(),
$this->getPayload(),
$this->getHash()
)
);
if( $this->getClient()->returnCode() != GEARMAN_SUCCESS )
{
echo "Code: " . $this->getClient()->returnCode() . "\t" . GEARMAN_TIMEOUT . "\n";
}
}
そのエコーが戻ってきます
Method: doHighBackground Worker: leadposter Payload: 10930 Hash: 091878f5965e4a1de2992c607b3c562b240792a6
エラー情報はこちら
["error":"Uecode\GearmanBundle\Gearman\Job":private]=>
array(4) {
["attempts"]=>
int(3)
["return_code"]=>
int(47)
["error_no"]=>
int(0)
["error"]=>
string(103) "gearman_wait(GEARMAN_TIMEOUT) timeout reached, no servers were available -> libgearman/universal.cc:325"
}