Foros del Web » Programando para Internet » PHP »

Mantener una conexión abierta con una base de datos

Estas en el tema de Mantener una conexión abierta con una base de datos en el foro de PHP en Foros del Web. Hola. La duda que voy a plantear aquí seguramente será una duda que cualquiera que haya querido hacer algo medianamente grande en PHP se habrá ...
  #1 (permalink)  
Antiguo 27/12/2011, 18:44
 
Fecha de Ingreso: diciembre-2011
Mensajes: 4
Antigüedad: 12 años, 4 meses
Puntos: 0
Mantener una conexión abierta con una base de datos

Hola.

La duda que voy a plantear aquí seguramente será una duda que cualquiera que haya querido hacer algo medianamente grande en PHP se habrá topado, lo raro del asunto es que rastreando la red no he encontrado respuesta.

La cosa está en cómo mantener un enlace abierto con una base de datos de una forma "sana". Imaginemos que quiero hacer un chat; el texto que escriben los usuarios está guardado en una tabla de una base de datos; cada cliente debe realizar una petición cada, digamos medio segundo, para asegurarse de que la ventana de chat permanece actualizada con lo que los usuarios introducen.

Pero el problema viene al darte cuenta de que al finalizar el script, php destruye totalmente todos los objetos y variables creados; y claro, abrir y cerrar conexiones en tiempos tan pequeños es un gran problema.

Si hablaramos de otro lenguaje podríamos estar hablando de un pool de conexiones...pero por lo que veo PHP está muy limitado.

¿Alguien tiene alguna idea de cómo solucionar este entuerto?...si es que se puede...
  #2 (permalink)  
Antiguo 27/12/2011, 18:46
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Mantener una conexión abierta con una base de datos

Busca info sobre "COMET" o "AJAX Long Polling", hay mucho más cosas utiles sobre este último.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 28/12/2011, 05:14
 
Fecha de Ingreso: diciembre-2011
Mensajes: 4
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Mantener una conexión abierta con una base de datos

Hola Triby, si no me equivoco, lo que tu me comentas de Comet y el Ajax Long Polling es sobre cómo hacer que el servidor espere a emitir una respuesta; podría ser una solución válida para según qué casos, pero imagina que hay un pico de actividad en el chat que he comentado antes, el servidor emitiría muchas respuestas en poco tiempo y se abrirían y cerrarían muchas conexiones con la BD en muy poco tiempo, lo cual sigue siendo un problema.

O imagina también que es el cliente que, debido a las caracterísitcas del sitio, debe enviar muchos datos por segundo, y que se tienen que insertar en la BD, volveríamos a tener el problema de abrir y cerrar conexiones en tiempos muy pequeños.

¿Alguna otra solución?
  #4 (permalink)  
Antiguo 28/12/2011, 05:27
Avatar de SetheR  
Fecha de Ingreso: enero-2009
Mensajes: 265
Antigüedad: 15 años, 3 meses
Puntos: 44
Respuesta: Mantener una conexión abierta con una base de datos

Para tu problema, la mejor solución es usar alguna tecnología como Node.js (aquí algunos tutoriales interesantes) que te permite mantener una conexión permanente y no bloqueante con el servidor.

Y luego, para la parte cliente, implementar websockets con HTML5 o usar librerías tipo Socket.IO para que sea más "crossbrowser".

Por otra parte, Apache y Node.js pueden trabajar juntitos, tanto en la misma máquina como en máquinas distintas. Un ejemplo interesante.

Saludos!
  #5 (permalink)  
Antiguo 28/12/2011, 05:32
Avatar de fishdesign  
Fecha de Ingreso: abril-2011
Ubicación: Málaga
Mensajes: 389
Antigüedad: 13 años
Puntos: 95
Respuesta: Mantener una conexión abierta con una base de datos

Conexiones persistentes?
http://www.php.net/manual/en/feature...onnections.php
http://es2.php.net/mysql_pconnect

Un saludo
__________________
Web Designer.
Themes-Up!, próximamente
  #6 (permalink)  
Antiguo 28/12/2011, 11:35
 
Fecha de Ingreso: diciembre-2011
Mensajes: 4
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: Mantener una conexión abierta con una base de datos

Gracias SetheR por la respuesta, miraré los links que me has puesto.

Cita:
Iniciado por fishdesign
Conexiones persistentes?
http://www.php.net/manual/en/feature...onnections.php
http://es2.php.net/mysql_pconnect
Ya lo había visto esto...pero no acabo de entender exactamente cómo funciona. ¿Se basa en una conexión que persiste tras terminar el script no? ¿Pero entonces cómo hago para cerrarla una vez ya no sea útil?...lo que me lleva a mi última duda que es, ¿esa conexión es única para un cliente o si un cliente abre una conexión persistente de estas, otro cliente puede usarla también?
  #7 (permalink)  
Antiguo 28/12/2011, 12:25
 
Fecha de Ingreso: abril-2011
Mensajes: 4
Antigüedad: 13 años
Puntos: 2
Respuesta: Mantener una conexión abierta con una base de datos

¿Estás seguro de que quieres hacer esto?

Si alojas tu sitio en un hosting compartido te encontrarás que limitan el número de conexiones simultáneas a las bases de datos (normalmente 10 conexiones simultáneas, pero aunque fueran 100, el problema sería el mismo).

Si se da este caso, entonces el enénsimo usuario que entre en tu sitio va a encontrarse el famoso mensaje de "no se puede conectar"
  #8 (permalink)  
Antiguo 28/12/2011, 12:29
Colaborador
 
Fecha de Ingreso: mayo-2004
Mensajes: 152
Antigüedad: 19 años, 11 meses
Puntos: 26
Respuesta: Mantener una conexión abierta con una base de datos

tal vez es una tontería pero, no sería mas práctico usar un servidor de chat y que la ventana con javascript (o lo que sea) sea un cliente?
__________________
Comprar impresoras 3D
  #9 (permalink)  
Antiguo 28/12/2011, 15:58
Avatar de SetheR  
Fecha de Ingreso: enero-2009
Mensajes: 265
Antigüedad: 15 años, 3 meses
Puntos: 44
Respuesta: Mantener una conexión abierta con una base de datos

Las conexiones persistentes en PHP no son viables, ya que PHP termina su "estado" cuando finaliza la petición y se envía la respuesta. Es parte de la concepción de este tipo de lenguajes.

Como ya te dije anteriormente, deberías utilizar alguna tecnología basada en eventos como Node o Twisted con python, o en su defecto utilizar plataformas como Java o Flash.

Lenguajes de scripting como PHP no te valdrán para solucionar tu problema porque no están hechos para eso.

Saludos

Etiquetas: abierta, tabla, variables, usuarios
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 00:16.