Foros del Web » Programando para Internet » PHP »

dejar conexión abierta

Estas en el tema de dejar conexión abierta en el foro de PHP en Foros del Web. Buenas! Estoy intentando aumentar la velocidad de mis scrpits php. Ahora mismo acceso a una base de datos en varias funciones, a través de una ...
  #1 (permalink)  
Antiguo 29/08/2013, 09:34
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 7 meses
Puntos: 33
dejar conexión abierta

Buenas!

Estoy intentando aumentar la velocidad de mis scrpits php.
Ahora mismo acceso a una base de datos en varias funciones, a través de una clase que he creado con este fin.

Entonces, en cada función instancio un objeto, conecto, hago las query (usando mysql_ - estoy intentando también migrar hacia mysqli_) y desconecto.

Mi pregunta es, ¿sería útil y seguro abrir la conexión al principio y dejarla abierta? Es decir, de alguna manera evitar que PHP continuamente me cree conexiones (según tengo entendido consume bastante) simulando algo así como un pool...

No se si me explico bien... a ver si me podéis echar un cable.

Un saludo!
  #2 (permalink)  
Antiguo 29/08/2013, 13:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: dejar conexión abierta

Claro, es lo más eficiente, usar una sola conexión global, el instanciar y cerrar por cada llamada del objeto hace que sea muy lento e ineficiente el sistema.

Ahora bien puedes usar el destructor de la clase para cerrar la conexión, o cerrarla cuando ya estés seguro que no la vas a necesitar, eso debe de estar en tu control.
  #3 (permalink)  
Antiguo 30/08/2013, 01:48
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 7 meses
Puntos: 33
Respuesta: dejar conexión abierta

Estuve probando de hacer algo, pero me da errores... comento un poco la "jugada" a ver si vemos el fallo...

- En la página principal (con usuario registrado y sesión iniciada) instancio mi objeto ("_GDataConnection").

- Abro la conexión con "_GDataConnection::connect()"

- Guardo la instancia de este objeto ($GDC) en sesión ($_SESSION['gdc'] = $GDC)

Hasta aquí todo bien... ahora la web carga, y se hacen una serie de peticiones AJAX. En esta, ahora mismo tengo cosas como:

Código PHP:
Ver original
  1. function mifuncion($datos){
  2.     $GDC = new _GDataConnection();
  3.     $GDC->connect();
  4.  
  5.     //cosas...
  6.  
  7.     $GDC->disconnect();
  8. }

y cuando pruebo a cambiarlo por:

Código PHP:
Ver original
  1. function mifuncion($datos){
  2.     /*$GDC = new _GDataConnection();
  3.     $GDC->connect();*/
  4.  
  5.     if(!isset($_SESSION))
  6.         session_start();
  7.  
  8.     $GDC = $_SESSION['gdc'];
  9.  
  10.     //cosas...
  11.  
  12.     //$GDC->disconnect();
  13. }

ya no me hace las consultas...

Como era un poco tarde cuando lo probé, ya no me dio tiempo a mirar a fondo el log de errores, pero en las funciones que cambié el conector por la variable de sesión no tiraban las consultas (ya que me decía que ciertas variables no eran objetos, cuando lanzo consultas para posteriormente construir objetos...).

Gracias por la respuesta.

Un saludo.
  #4 (permalink)  
Antiguo 30/08/2013, 08:24
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: dejar conexión abierta

No puedes guardar recursos en una sesión. En el Manual esta especificada la razón. Tienes que tener un punto de entrada global y ahí es donde debes realizar la conexión.

Saludos.
  #5 (permalink)  
Antiguo 03/09/2013, 22:57
 
Fecha de Ingreso: abril-2012
Ubicación: 41°37′00″N, 00°37′00″E
Mensajes: 462
Antigüedad: 12 años, 7 meses
Puntos: 33
Respuesta: dejar conexión abierta

Entonces, como dices, ¿podría hacer algo como esto?

Código PHP:
Ver original
  1. //empieza la llamada AJAX:
  2.  
  3. $GDC->connect();
  4. funcion1();
  5. $objeto1->metodo1();
  6. $GDC->disconnect();

Si es así, supongo que como parámetro tendría que pasar mi $GDC, ¿Cierto?

Gracias por responder.
  #6 (permalink)  
Antiguo 04/09/2013, 11:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: dejar conexión abierta

Pues independiente de como lo hagas, el punto es que tienes que diseñar tu código para que dependa de la conexión que tu le envíes, y que seas tú como programador que controlas cuando conectar y desconectar.

Etiquetas: abierta, dejar, mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:49.