私はbeanstalkdを使用して、一部の作業を他のマシンにオフロードしています。セットアップは少し珍しいです、サーバーはインターネット上にあります(パブリックIP)が、消費者はいくつかの人々の家のadslラインの後ろにいます。そのため、クライアントとしてLinuxサーバーが動的IPを介して送信され、サーバーに接続してジョブを取得します。それはすべてPHPであり、私はpheanstalkライブラリを使用しています。
しばらくの間、すべてがスムーズに実行されますが、その後、adslはIPを変更します(プロバイダーが24時間ごとに切断-再接続を強制します)。クライアントはハングし、「予約」から外れることはありません。
リザーブにタイムアウトを設定すると役立つと思いましたが、そうではありませんでした。どうやら、クライアントはコマンドを発行してブロックし、タイムアウトをチェックすることはありません。(単純な予約ではなく)タイムアウト付きの予約を発行するだけであり、タイムアウトが発生したときにTIME_OUTを返すのはサーバーの責任です。問題は、接続が切断され(ただし、TCP / IPは、いずれかの側が相手側と通信しようとするまで、そのことをまだ認識していません)、クライアントが読み取りをブロックした場合、接続が戻らないことです。
ライブラリは、ローカルで(たとえば、サーバーに接続しようとしたときの)ある種のタイムアウトをサポートしているようですが、このシナリオを想定していないようです。
失効した接続を検出して強制的に再接続するにはどうすればよいですか?プロトコル(およびpheanstalk自体)に何らかのキープアライブがありますか?
ありがとう!