2

PHP スクリプトを使用して beanstalkd サーバーに接続し、既存のキューからジョブを予約しようとしています。fgets() 関数を使用してデーモンからの応答を取得しています。ジョブが利用可能でない限り、スクリプトがハングすることを期待しています。サンプル コードは次のとおりです。

set_time_limit(0);
$connection = fsockopen('localhost', 11300);
fwrite($connection, "reserve\r\n");
stream_set_blocking($connection, TRUE);
fgets($connection);

ご覧のとおり、fgets() 関数を強制的にブロックしようとしており、max_execution_time を 0 (つまり制限なし) に設定していますが、しばらくすると (2 分)、スクリプトはエラーなしで戻ります。telnet 経由で reserve コマンドを実行しようとしましたが、実行中にハングします。fread() も使用しようとしましたが、同じ動作になります。

それを解決する方法について何か提案はありますか?

4

3 に答える 3

1

こちらも使っstream_set_timeout()てみてください。

于 2009-08-10T15:23:10.697 に答える
0

デーモンが 2 分後に行末文字を出力する可能性があります。空白文字列をチェックしてループバックしようとしましたか?

于 2010-03-08T14:30:04.253 に答える
0

php.ini に値を設定しましたか? phpinfo() で正しい値を確認しましたか? プログラムで設定すると、機能しません。http://us.php.net/manual/en/function.set-time-limit.php :

この関数は、PHP がセーフ モードで実行されている場合は効果がありません。セーフ モードをオフにするか、php.ini で時間制限を変更する以外に回避策はありません。

于 2009-08-10T15:25:52.613 に答える