3

I'd like some help understanding the use of pheanstalk (php beanstalk client). I have a PHP program that is executed on the server when form data is sent to it. The PHP program should then package the form data as a JSON structure and send it to a backend server process.

私が理解していないのは、beanstalkd サーバーへの接続です。PHP プログラムが実行されるたびに新しい Pheanstalk() オブジェクトを作成する必要がありますか? その場合、接続を作成するコストが発生します。接続が閉じられるのはいつですか (pheanstalk には close() メソッドがないため)?

接続が永続的である場合、それは PHP プログラムのすべての実行間で共有されますか? その場合、同時ヒットの場合はどうなりますか? 助けてくれてありがとう。

4

1 に答える 1

4

はい。PHPはそれぞれを新しく起動するため、プログラムを起動するたびに、Pheanstalk(またはその他のライブラリ)との新しい接続を作成する必要があります。ただし、オーバーヘッドはごくわずかです。

Beanstalkdプロセスは、多数の接続を簡単に処理できるように最適化されており、それらにアトミックに作用します。同じものを2つ配置しない限り、重複するジョブは発生しません(その場合でも、ジョブIDが異なります)。 )。

Pheanstalkは、最初のコマンドが送信されるまで、データをデーモンに送信しません(接続を開くことを含む)。このため、アクティブにリクエストを行うまでデーモンが生きているかどうかを判断することはできません(私のテストでは、現在のチューブのリストを取得します)。実行中のプログラムでインスタンス化されたクラスを再利用し続けると、もちろんそれを再利用し続けるでしょう。

正式なclose()ものunset($pheanstalk)はありませんが、デストラクタを実行して同じことを行います。繰り返しになりますが、呼び出しはプログラムであるため一時的であり、デーモンは許可されている場合は非常に多くの同時接続を開いたままにすることができるため、問題にはなりません。プログラム自体と同じようにシャットダウンされます。

要するに、心配しないでください。Beanstalkdに接続したり、Beanstalkdからデータを送信したりするオーバーヘッドは、要求/応答を生成する際にワーカーまたはプロデューサーによって実行される作業のごく一部になる可能性があります。

于 2012-02-05T20:08:22.747 に答える