持続的接続 (バージョン 1.3.0 以降)

バージョン 1.3.0 以降のドライバは、持続的接続を活用してデータベースサーバーへの接続数を最小化します。 接続は PHP のワーカープロセスに保存され、別のリクエストで再利用されることもあります。

データベースサーバーに接続する前に、ドライバはその接続のハッシュ値を算出します。 このときに利用する情報は、ホストやポート、レプリカセット名 (使っている場合)、 認証情報 (ユーザー名、パスワード、データベース名)、プロセス ID です。 同じハッシュ値の接続が既に存在する場合は、新しい接続を作らずに既存の接続を再利用します。 個々の持続的接続の情報を取得するには MongoClient::getConnections() を使います。 次のプログラムを見てみましょう。

<?php

$m1 
= new MongoClient('mongodb://localhost');
$m2 = new MongoClient('mongodb://localhost');
$m3 = new MongoClient('mongodb://user:pw@localhost');
$m4 = new MongoClient('mongodb://127.0.0.1');
$m5 = new MongoClient('mongodb://rs1.local:30017,rs2.local:30018/?replicaSet=rs');
$m6 = new MongoClient('mongodb://sharding.local:40017');

foreach (
MongoClient::getConnections() as $conn) {
    echo 
$conn['hash'], "\n";
}

?>

上の例の出力は、 たとえば以下のようになります。

localhost:27017;-;X;15487
localhost:27017;-;admin/user/c56c…8bbc;15487
127.0.0.1:27017;-;X;15487
rs1.local:30017;rs;X;15487
rs2.local:30018;rs;X;15487
sharding.local:40017;-;X;15487

この例では $m1$m2 のハッシュ値が同じになるので、 これらは持続的接続を共有します。その他の MongoClient インスタンス用の接続はハッシュ値が別になるので、 それぞれ別のソケットを利用します。 "localhost" と "127.0.0.1" のハッシュ値が同じにならないことに注意しましょう。 DNS の名前解決については考慮していません。