バージョン 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 の名前解決については考慮していません。