私はgearmanが$ gmclient-> do( "somefunction"、 "somedata")を使ってphpが要求を出した後に関数からphpに値を返そうとしています。しかし、PHPクライアントは単にタイムアウトします。私が使用している正確なコードは、PHPマニュアルからまっすぐです。私は、ブラウザが私にこのメッセージを表示しますhttp://docs.php.net/manual/en/gearmanclient.do.phpGearmanの戻り値が機能しない
から例#1を使用しています:
このウェブページには使用できません。
http://yoursite.com/client.php のウェブページは一時的に停止しているかは 新しいウェブ アドレスに移動した可能性があり。
このエラーの詳細情報以下 は元のエラーメッセージです
エラー324(net :: ERR_EMPTY_RESPONSE): 不明なエラー。
エラーメッセージを詳しく説明すると、ブラウザはChromeです。
違いがある場合は、worker.phpファイルがコマンドウィンドウ "php worker.php"を使用して端末ウィンドウで実行されています。私はUbuntu 9.10 Karmic Koalaを実行しています。 http://blog.stuartherbert.com/php/2010/02/26/getting-gearman-up-and-running-on-ubuntu-karmic/
ターミナルウィンドウを確認してギヤマンが要求を受け取り、結果を端末にエコーして、クライアントに返信しないようにしました。
最終目標は、実行された関数からの戻り値をクライアントに戻し、その値をユーザーに表示させることです。
UPDATE:要求されたよう
、コードは以下の通りです:
worker.php(労働者)
<?php
echo "Starting\n";
# Create our worker object.
$gmworker= new GearmanWorker();
# Add default server (localhost).
$gmworker->addServer();
# Register function "reverse" with the server. Change the worker function to
# "reverse_fn_fast" for a faster worker with no output.
$gmworker->addFunction("reverse", "reverse_fn");
print "Waiting for job...\n";
while($gmworker->work())
{
if ($gmworker->returnCode() != GEARMAN_SUCCESS)
{
echo "return_code: " . $gmworker->returnCode() . "\n";
break;
}
}
function reverse_fn($job)
{
return strrev($job->workload());
}
?>
client.php(クライアントコード - これは私がロードしていますページですブラウザ)
<?php
# Client code
echo "Starting\n";
# Create our client object.
$gmclient= new GearmanClient();
# Add default server (localhost).
$gmclient->addServer();
echo "Sending job\n";
$result = $gmclient->do("reverse", "Hello!");
echo "Success: $result\n";
?>
ここでのコメントは動作していたと言っています。繰り返しますが、N OT働く。実際の結果ではなく、$ gmclient-> doを$ gmclient-> doBackgroundに変更して、ジョブIDを出力したので動作するように見えました。
(SOLUTION WITH)FINAL UPDATE
いくつかの作業の後、私はそれがコーディングエラーはなかったことを考え出しました。 Gearmanが不適切にインストールされました。 apt-get installを使う代わりに、手動でやることにしました。私はgearmand(c)をgearmanサイト(http://gearman.org/index.php?id=download)からダウンロードしました。私はその後、ギヤマンサイトでもチュートリアルを使用しました。http://gearman.org/index.php?id=getting_startedで始まり、http://gearman.org/index.php?id=gearman_php_extension
ummウェブページが見つからない場合、あなたは返品を受け取らないでしょう。不思議私はちょうど再びリンクをヒットし、リターンを得た。 "ジョブの成功を送信する:H:svmain-desktop:57"サーバーをチェックして、正常に動作していることを確認します。 –
do()をdoBackground()に変更することで、それはまだ関数の実際の結果ではありません。サーバーが正常に動作しています。 – user396404
gmtest.phpファイルに何か問題があります。ホストは正常です。私はあなたがファイルを変更し、それがうまくいっていて、ファイルをもう一度変更しても動作しないことがわかりました。コードを投稿すると、問題のデバッグに役立つかもしれません。 –