0

マシン1- PHPAPIを使用するクライアント

$client = new \GearmanClient();
$client->addServer(..);
$client->doBackground('demotask', 'hello world');

マシン2-ワーカー-PHPapiを使用せず、bashで直接:
gearman -w -f demotask -- php -f taskexecutor.php

taskexecutorは実行されていますが、期待どおりに含まれて$argvませんhello world

PSはPHPのAPIに関心がなく、2番目のマシンで永遠にwhileループを実行します。必要なときにギアマンにスクリプトを開始してもらいたい

4

1 に答える 1

1

私は本当にこの実装をお勧めしません。PHPスクリプトで問題が発生した場合、ジョブを再送信したり、ギアマンと通信したりすることはできません。

Anwyays、問題は、ギアマンクライアントがジョブを取得すると、ジョブのワークロードがphpプロセスのSTDINに渡されることです。つまり、$argvは常に空になります。渡したパラメータは、STDINから次のように読み取ることができます。

$ params = fgets(STDIN);

json_encodeやのような単純な関数を使用できjson_decode、構造やエンコーディングなどについてあまり心配する必要がないように、パラメータをJSON文字列として渡すことをお勧めします。

于 2013-01-19T20:19:19.600 に答える