1

現在、SoapClient を使用して PHP スクリプトを介して SOAP Web サービスにアクセスしています。私のスクリプトは、それぞれが要求を送信し、MySQL データベースに応答をプッシュする複数のサブスクリプト (1 秒間に最大 30 個) を呼び出します。私のプロセスは、「非同期」の要求/応答メカニズムをエミュレートしようとしています。

私の添え字では、mysql に接続し、完了したら接続を閉じます。1 秒あたり約 30 個のサブスクリプトを実行しています。MySQL 接続を使い果たしているという問題が発生しています。

これは悪い習慣だと思うので、接続の最大数を増やしたくありません。この問題にアプローチするより良い方法はありますか? どうにかして、添え字とスクリプトの間で 1 つの mysql 接続を共有できると考えています。

4

3 に答える 3

0

接続プールを試すことができます。これがphpで可能かどうか、そしてそのためにすでに利用可能なフレームワークがあるかどうかはわかりません。

利用できない場合は、接続のリストを含むシングルトンクラスを使用できます。N秒間アイドル状態の場合、このクラスによって接続が閉じられるようにします。これは、30個の添え字が、他のスクリプトで使用されていない接続を再利用できることを意味します。

于 2013-01-30T14:04:59.487 に答える
0

すべての添え字が1つのスレッドで順番に実行される場合は、MySQLに一度接続して、この接続をすべての添え字に渡すことができます。

添え字が並行して実行される場合、MySQLライブラリがスレッドセーフであるかどうかによって異なります。そうである場合は、それらすべてに1つの接続を渡すことができます。ただし、そうでない場合は、スクリプトごとに1つの接続しか選択できません。この情報は、そのドキュメントに記載されている必要があります。

一部のスクリプトのみを並行して実行する必要があり、一部のスクリプトをしばらく待機できる場合は、いくつかの接続(10程度)のプールを準備し、一度に10個のスクリプトのみを実行できます。1つのスクリプトが終了したら、次に起動して古い接続を再利用します。

于 2013-01-30T13:22:49.357 に答える
0

mysqli_pconnect を試しましたか? サブプロセスをどのように生成しますか? メインプロセスでデータベース接続を開いてサブプロセスに渡すことはできませんか? あなたがやっていることのコード例はありますか?

于 2013-01-30T14:13:49.957 に答える