Постоянные соединения (версия 1.3.0+)

Все версии драйвера, начиная с 1.3.0, используют постоянные соединения, чтобы минимизировать количество подключений к каждому серверу базы данных. Эти соединения сохраняются рабочим процессом PHP и могут использоваться повторно между несколькими запросами.

Перед подключением к серверу базы данных, драйвер создаст хеш для соединения на основе своего хоста, порта, имени набора реплик (если есть), любых учетных данных аутентификации (например, имени пользователя, пароля, базы данных) и идентификатора процесса. Если для этого хеша уже существует соединение, оно будет использоваться вместо создания нового соединения, связанного с этим хешем. 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 не учитывается.