2011-01-06 5 views
0

私は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

+0

ummウェブページが見つからない場合、あなたは返品を受け取らないでしょう。不思議私はちょうど再びリンクをヒットし、リターンを得た。 "ジョブの成功を送信する:H:svmain-desktop:57"サーバーをチェックして、正常に動作していることを確認します。 –

+0

do()をdoBackground()に変更することで、それはまだ関数の実際の結果ではありません。サーバーが正常に動作しています。 – user396404

+0

gmtest.phpファイルに何か問題があります。ホストは正常です。私はあなたがファイルを変更し、それがうまくいっていて、ファイルをもう一度変更しても動作しないことがわかりました。コードを投稿すると、問題のデバッグに役立つかもしれません。 –

答えて

1

コードを変更し、GearmanClient :: addTaskを使用してください。戻り値を使用して、監視プロセスを実装できます。 GearmanTaskクラスで使用できる他の関数をチェックしてください。

0
//Wrong 
$gmworker->addServer(); 

//Correct 
$gmworker->addServer("localhost",4730); 
関連する問題