1

これで、単純なギアマン システムが実行され、ワー​​カーが実行されました。

ワーカーは基本的にペイロード (この場合は乱数であり、画面にエコー バックすることになっています) を受け取るだけです。文字通り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"
  }
4

2 に答える 2

0

解決しました。

接続はメソッド間で持続しませんでした...そのため、サーバー プールを構築し、ジョブを実行する直前にサーバーに接続します

于 2012-10-16T21:12:23.783 に答える