Обробка з'єднання та сталість
Зауваження: На Unix, драйвер MongoDB чутливий до сценаріїв, які використовують системний виклик fork() без наступного exec(). Користувачам рекомендується не перевикористовувати екземпляр MongoDB\Driver\Managerв дочернем процессе. child process.
Постійність підключення та топології (версія PHP починаючи з 1.2.0)
Усі версії драйвера, починаючи з 1.2.0, зберігають клієнтський об'єкт. » libmongoc у робочому процесі PHP, що дозволяє йому повторно використовувати з'єднання з базою даних, стану аутентифікації і інформацію про топологію у кількох запитах.
Коли викликається MongoDB\Driver\Manager::__construct(), З його аргументів створюється хеш (тобто рядок URI та параметри масиву). Драйвер спробує знайти раніше збережений клієнтський об'єкт » libmongoc для цього хеша. Якщо існуючий клієнт не може бути знайдений для хеша, буде створено новий клієнт та збережено для майбутнього використання. Цю поведінку можна вимкнути через параметр драйвера "disableClientPersistence"
Кожен клієнт містить свої власні підключення до бази даних та представлення топології сервера (наприклад, автономний, набір реплік, кластер сегментів). Зберігаючи клієнт між запитами PHP, драйвер може повторно використовувати встановлені підключення до бази даних та усувати потребу » виявлення топології серверапри каждом запросе.
Розглянемо наступний приклад:
Loading...
Перші два об'єкти Manager будуть використовувати один і той самий клієнт » libmongocоскільки їх аргументи конструктора ідентичні. Третій та четвертий об'єкти будуть використовувати кожен свій клієнт. Усього буде створено три клієнти, і процес PHP, який виконує цей скрипт, відкриє два з'єднання з адресою 127.0.0.1
та одне з'єднання з кожною з адрес: rs1.example.com
иrs2.example.com
. Якщо драйвер виявляє додаткових членів набору реплік після виконання команд hello
, також відкриває додаткові підключення до цих серверів.
Якщо цей процес знову виконає сценарій у другому запиті, ці три клієнти будуть використані повторно, а нових підключень встановлено не буде. Залежно від того, як давно було опрацьовано попередній запит, драйверу може знадобитися виконати додаткові команди. hello
для обновления своего представления топологий.
Постійність сокетів (версії PHP до 1.2.0)
Версії драйвера PHP до 1.2.0 використовують PHP's Streams API для з'єднань з базою даних, використовуючи API модуля » libmongoc для визначення користувальницьких обробників для зв'язку із сокетами; однак новий клієнт libmongoc створюється для кожного екземпляра класу MongoDB\Driver\Manager. В результаті драйвер зберігає окремі з'єднання з базою даних, але не інформацію про стан автентифікації чи топології. Це означає, що драйвер повинен видавати команди на початку кожного запиту для автентифікації та » виявлення топології сервера
З'єднання з базою даних зберігаються за допомогою хеша, отриманого з хоста, порту та рядка URI сервера, що використовується для побудови MongoDB\Driver\Manager. Параметри масиву конструктора не включені у цей хеш.
Зауваження: Версії драйвер >= 1.1.8 and < 1.2.0 не зберігають сокети для з'єднань SSL. Дивіться » PHPC-720 для отримання додаткової інформації.
Незважаючи на недоліки, пов'язані зі збереженням з'єднань SSL та інформацією про топологію, ця версія драйвера підтримує все параметри контексту SSL, оскільки використовує PHP Streams API.