Nota: Em plataformas Unix, a extensão é sensível a scripts que usam a chamada de sistema fork() sem chamar também exec(). Os usuários são aconselhados a não reusar instâncias de MongoDB\Driver\Manager em um processo filho bifurcado.
Todas as versões da extensão desde 1.2.0 persistem o objeto cliente » libmongoc no processo de trabalho do PHP, o que permite reutilizar conexões de banco de dados, autenticação de estados, e informações de topologia em diversas solicitações.
Quando MongoDB\Driver\Manager::__construct() é
invocado, um hash é criado a partir de seus argumentos (ou seja, string URI e
opções de array). A extensão tentará encontrar um objeto cliente
» libmongoc anteriormente persistente para
esse hash. Se um cliente existente não puder ser encontrado para o hash, um novo cliente
será criado e persistido para uso futuro. Este comportamento pode ser desabilitado
através da opção do driver "disableClientPersistence"
.
Cada cliente contém suas próprias conexões de banco de dados e uma visão da topologia do servidor (por exemplo, standalone, replica set, shard cluster). Ao persistir o cliente entre solicitações PHP, a extensão é capaz de reutilizar conexões de banco de dados estabelecidas e eliminar a necessidade de » descobrir a topologia do servidor em cada solicitação.
Considere o seguinte exemplo:
<?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]));
}
?>
Os dois primeiros objetos Manager compartilharão o mesmo
cliente » libmongoc, pois
seus argumentos construtores são idênticos. O terceiro e o quarto objetos usarão
cada um seu próprio cliente. No total, três clientes serão criados e o
worker PHP que executa este script abrirá duas conexões para
127.0.0.1
e uma conexão para cada um de
rs1.example.com
e rs2.example.com
.
Se a extensão descobrir membros adicionais do conjunto de réplicas após
emitir comandos hello
, ela também abrirá conexões adicionais
com esses servidores.
Se o mesmo worker executar o script novamente em uma segunda solicitação, os três
clientes serão reutilizados e nenhuma nova conexão será feita. Dependendo de há
quanto tempo a solicitação anterior foi atendida, a extensão pode precisar
emitir comandos hello
adicionais para atualizar sua visualização das
topologias.
Versões da extensão anteriores a 1.2.0 utilizam a API Streams do PHP para conexões de banco de dados, usando uma API dentro de » libmongoc para designar manipuladores personalizados para comunicação de socket; entretanto, um novo cliente libmongoc é criado para cada MongoDB\Driver\Manager. Como resultado, a extensão persiste em conexões de banco de dados individuais, mas não no estado de autenticação ou nas informações de topologia. Isso significa que a extensão precisa emitir comandos no início de cada solicitação para autenticar e » descobrir a topologia do servidor.
As conexões de banco de dados são persistidas por um hash derivado do host do servidor, da porta e da string URI usada para construir o MongoDB\Driver\Manager. As opções de array do construtor n ão estão incluídas neste hash.
Nota: Versões da extensão >= 1.1.8 e < 1.2.0 não persiste sockets para conexões SSL. Consulte » PHPC-720 para obter informações adicionais.
Apesar de suas deficiências com conexões SSL persistentes e informações de topologia, esta versão da extensão suporta todas as opções de contexto SSL, uma vez que usa a API Streams do PHP.