Замечание: На платформах Unix модуль чувствителен к сценариям, которые используют системный вызов fork() без последующего вызова exec(). Пользователям не рекомендуется переиспользовать экземпляр класса MongoDB\Driver\Manager в дочернем процессе. child process.
Каждая версия модуля начиная с 1.2.0 сохраняет клиентский объект » libmongoc в рабочем процессе PHP, что позволяет ему повторно использовать соединения с базой данных, состояния аутентификации и информацию о топологии в нескольких запросах.
    Когда вызывается метод MongoDB\Driver\Manager::__construct(),
    из его аргументов создаётся хеш (т. е. строка URI и параметры
    массива). Модуль попытается найти ранее сохранённый клиентский объект
    » libmongoc для
    этого хеша. Если существующий клиент не может быть найден для хеша, будет создан
    новый клиент и сохранён для будущего использования. Это поведение можно выключить
    через параметр драйвера "disableClientPersistence".
   
Каждый клиент содержит свои собственные подключения к базе данных и представление топологии сервера (например, автономный, набор реплик, кластер сегментов). Сохраняя клиент между PHP-запросами, модуль может переиспользовать установленные подключения к базе данных и устранять необходимость » обнаружения топологии сервера при каждом запросе.
Рассмотрим следующий пример:
<?php
$managers = [
    new MongoDB\Driver\Manager('mongodb://127.0.0.1'),
    new MongoDB\Driver\Manager('mongodb://127.0.0.1'),
    new MongoDB\Driver\Manager('mongodb://127.0.0.1:27017'),
    new MongoDB\Driver\Manager('mongodb://rs1.example.com,rs2.example.com/', ['replicaSet' => 'myReplicaSet']),
];
foreach ($managers as $manager) {
    $manager->executeCommand('test', new MongoDB\Driver\Command(['ping' => 1]));
}
?>
    Первые два объекта Manager будут использовать один и тот же
    клиент » libmongoc, поскольку
    их аргументы конструктора идентичны. Третий и четвёртый объекты будут
    использовать каждый свой клиент. Всего будет создано три клиента, и
    процесс PHP, выполняющий этот скрипт, откроет два соединения с
    адресом 127.0.0.1 и одно соединение с каждым из
    адресов: rs1.example.com и rs2.example.com.
    Если драйвер обнаруживает дополнительных членов набора реплик после выполнения команд
    hello, он также открывает дополнительные подключения
    к этим серверам.
   
    Если этот же процесс снова выполнит сценарий во втором запросе, эти три
    клиента будут использованы повторно, а новых подключений установлено не будет. В зависимости
    от того, как давно был обработан предыдущий запрос, модулю может потребоваться выполнить
    дополнительные команды hello для обновления своего представления
    топологий.
   
Версии модуля до 1.2.0 используют API-интерфейс PHP-потоков для подключений к базам данных через внутренний API-интерфейс библиотеки » libmongoc, чтобы назначить пользовательские обработчики для связи с сокетами; однако новый клиент libmongoc создаётся для каждого менеджера MongoDB\Driver\Manager. В результате модуль сохраняет отдельные соединения с базой данных, но не информацию о состоянии аутентификации или топологии. Поэтому модулю приходится выдавать команды в начале каждого запроса, чтобы проверить подлинность и » обнаружить топологию сервера.
Соединения с базой данных сохраняются как хеш хоста, порта и строки URI-идентификатора сервера, которую передавали в конструктор менеджера MongoDB\Driver\Manager. Параметры массива конструктора не включаются в этот хеш.
Замечание: Версии модуля >= 1.1.8 and < 1.2.0 не сохраняют сокеты для SSL-соединений. Смотрите » PHPC-720 для получения дополнительной информации.
Несмотря на недостатки, которые связаны с сохранением SSL-соединений и информацией о топологии, эта версия модуля поддерживает все параметры SSL-контекста, поскольку использует API-интерфейс потоков PHP.
