<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/mongodb.architecture.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'mongodb.connection-handling.php',
    1 => 'Conexiones',
    2 => 'Gesti&oacute;n de la conexi&oacute;n y de la persistencia',
  ),
  'up' => 
  array (
    0 => 'mongodb.architecture.php',
    1 => 'Arquitectura y funcionalidades especiales',
  ),
  'prev' => 
  array (
    0 => 'mongodb.overview.php',
    1 => 'Arquitectura',
  ),
  'next' => 
  array (
    0 => 'mongodb.persistence.php',
    1 => 'Persistir datos',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/mongodb/architecture.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="mongodb.connection-handling" class="section">
  
  <h2 class="title">Gestión de la conexión y de la persistencia</h2>

  
 <blockquote class="note"><p><strong class="note">Nota</strong>: 
 <span class="simpara">
 En las plataformas Unix, la extensión MongoDB es sensible a los scripts que utilizan
 la llamada al sistema fork() sin llamar a exec(). No se deben reutilizar
 instancias <span class="classname"><a href="class.mongodb-driver-manager.php" class="classname">MongoDB\Driver\Manager</a></span> en un proceso
 hijo derivado de un fork.
 </span>
 </p></blockquote>
 

  <div class="section">
   <h2 class="title">Conexiones y topología persistente (versión PHP desde 1.2.0)</h2>

   <p class="simpara">
    Todas las versiones de la extensión desde 1.2.0 conservan el objeto cliente
    <a href="https://github.com/mongodb/mongo-c-driver" class="link external">&raquo;&nbsp;libmongoc</a> en el proceso
    PHP, lo que le permite reutilizar las conexiones de base de datos, los
    estados de autenticación, <em>y</em> la información de
    topología a través de múltiples consultas.
   </p>

   <p class="simpara">
    Cuando <span class="methodname"><a href="mongodb-driver-manager.construct.php" class="methodname">MongoDB\Driver\Manager::__construct()</a></span> es
    invocado, se crea un hash a partir de sus argumentos (es decir, la
    cadena URI y el array de opciones). La extensión intentará encontrar un objeto
    cliente <a href="https://github.com/mongodb/mongo-c-driver" class="link external">&raquo;&nbsp;libmongoc</a> persistido
    previamente para este hash. Si no se puede encontrar un cliente existente para el hash, se creará un nuevo cliente y se persistirá para su uso futuro. Este comportamiento puede ser desactivado a través de la opción del controlador
    <code class="literal">&quot;disableClientPersistence&quot;</code>.
   </p>

   <p class="simpara">
    Cada cliente contiene sus propias conexiones de base de datos y una vista
    de la topología del servidor (por ejemplo, autónomo, conjunto de réplicas,
    grupo de fragmentos). Al persistir el cliente entre las consultas PHP,
    la extensión es capaz de reutilizar las conexiones de base de datos
    establecidas y eliminar la necesidad de
    <a href="https://github.com/mongodb/specifications/blob/master/source/server-discovery-and-monitoring/server-discovery-and-monitoring.md" class="link external">&raquo;&nbsp;descubrir la topología del servidor</a>
    en cada consulta.
   </p>

   <p class="simpara">
    Considere el siguiente ejemplo:
   </p>

   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br />$managers </span><span style="color: #007700">= [<br />    new </span><span style="color: #0000BB">MongoDB\Driver\Manager</span><span style="color: #007700">(</span><span style="color: #DD0000">'mongodb://127.0.0.1'</span><span style="color: #007700">),<br />    new </span><span style="color: #0000BB">MongoDB\Driver\Manager</span><span style="color: #007700">(</span><span style="color: #DD0000">'mongodb://127.0.0.1'</span><span style="color: #007700">),<br />    new </span><span style="color: #0000BB">MongoDB\Driver\Manager</span><span style="color: #007700">(</span><span style="color: #DD0000">'mongodb://127.0.0.1:27017'</span><span style="color: #007700">),<br />    new </span><span style="color: #0000BB">MongoDB\Driver\Manager</span><span style="color: #007700">(</span><span style="color: #DD0000">'mongodb://rs1.example.com,rs2.example.com/'</span><span style="color: #007700">, [</span><span style="color: #DD0000">'replicaSet' </span><span style="color: #007700">=&gt; </span><span style="color: #DD0000">'myReplicaSet'</span><span style="color: #007700">]),<br />];<br /><br />foreach (</span><span style="color: #0000BB">$managers </span><span style="color: #007700">as </span><span style="color: #0000BB">$manager</span><span style="color: #007700">) {<br />    </span><span style="color: #0000BB">$manager</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">executeCommand</span><span style="color: #007700">(</span><span style="color: #DD0000">'test'</span><span style="color: #007700">, new </span><span style="color: #0000BB">MongoDB\Driver\Command</span><span style="color: #007700">([</span><span style="color: #DD0000">'ping' </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">1</span><span style="color: #007700">]));<br />}<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>


   <p class="simpara">
    Los dos primeros objetos <span class="classname"><strong class="classname">Manager</strong></span> compartirán el mismo
    cliente <a href="https://github.com/mongodb/mongo-c-driver" class="link external">&raquo;&nbsp;libmongoc</a> ya que sus
    argumentos de constructor son idénticos. Los tercer y cuarto objetos
    utilizarán cada uno su propio cliente. En total, se crearán tres clientes y el proceso PHP ejecutando este script abrirá dos conexiones a
    <code class="literal">127.0.0.1</code> y una conexión a cada uno de
    <code class="literal">rs1.example.com</code> y <code class="literal">rs2.example.com</code>.
    Si la extensión descubre miembros adicionales del conjunto de réplicas
    después de emitir comandos <code class="literal">hello</code>, abrirá conexiones adicionales a estos servidores también.
   </p>

   <p class="simpara">
    Si las mismas conexiones son reutilizadas por el mismo proceso PHP, los tres
    clientes serán reutilizados y no se establecerá ninguna nueva conexión. En
    función del tiempo transcurrido desde la última consulta servida, la extensión
    puede necesitar emitir comandos <code class="literal">hello</code> adicionales para actualizar su vista de las topologías.
   </p>
  </div>

  <div class="section">
   <h2 class="title">Persistencia de sockets (versiones PHP antes de 1.2.0)</h2>

   <p class="simpara">
    Las versiones de la extensión antes de 1.2.0 utilizan la API de flujos PHP para
    las conexiones de base de datos, utilizando una API en
    <a href="https://github.com/mongodb/mongo-c-driver" class="link external">&raquo;&nbsp;libmongoc</a> para designar gestores personalizados para la comunicación por socket; sin embargo, se crea un nuevo cliente libmongoc para cada
    <span class="classname"><a href="class.mongodb-driver-manager.php" class="classname">MongoDB\Driver\Manager</a></span>. En consecuencia, la extensión persiste las conexiones de base de datos individuales pero no el estado
    de autentificación o la información de topología. Esto significa que
    la extensión debe emitir comandos al inicio de cada consulta para
    autenticarse y
    <a href="https://github.com/mongodb/specifications/blob/master/source/server-discovery-and-monitoring/server-discovery-and-monitoring.md" class="link external">&raquo;&nbsp;descubrir la topología del servidor</a>.
   </p>

   <p class="simpara">
    Las conexiones de base de datos son persistidas por un hash derivado del
    host del servidor, del puerto y de la cadena URI utilizada para construir el
    <span class="classname"><a href="class.mongodb-driver-manager.php" class="classname">MongoDB\Driver\Manager</a></span>. Las opciones del array del
    constructor no están incluidas en este hash.
   </p>

   <blockquote class="note"><p><strong class="note">Nota</strong>: 
    <span class="simpara">
     Las versiones de la extensión &gt;= 1.1.8 y &lt; 1.2.0 no persisten los
     sockets para las conexiones SSL. Ver
     <a href="https://jira.mongodb.org/browse/PHPC-720" class="link external">&raquo;&nbsp;PHPC-720</a> para más
     información.
    </span>
   </p></blockquote>

   <p class="simpara">
    A pesar de sus carencias con las conexiones SSL persistentes y la información
    de topología, esta versión de la extensión soporta todas las
    <a href="context.ssl.php" class="link">opciones de contexto SSL</a> ya que utiliza la API de flujos PHP.
   </p>
  </div>
 </div><?php manual_footer($setup); ?>