Conexión MySQL Interrumpida - ¿Cómo detectarlo?
Conexión MySQL Interrumpida - ¿Cómo detectarlo?
Buenas tardes,
Tengo un sistema "Híbrido". Está hecho con DBF's pero utilizo una conexión con un servidor MySQL (usando la TDolphin de Daniel).
Esta conexión es para enviarle al servidor los datos que son extraídos de las DBF's, pero sólo los necesarios para que los clientes del taller que consultan el sitio web puedan ver el estado de sus reparaciones.
La cuestión es que el internet a veces se corta y cuando se va a actualizar un registro en el servidor se queda en espera un largo rato (si la señal de internet está cortada). Durante ese rato largo, la aplicación, como es lógico, queda impedida de seguirse utilizando. Cuando pasa ese rato, la aplicación informa del error y se puede seguir con ella.
Después de todo lo expuesto viene mi consulta:
¿Se puede detectar rápidamente desde la aplicación cuando la conexión con el servidor MySQL fue interrumpida?
Gracias.
Rolando
Tengo un sistema "Híbrido". Está hecho con DBF's pero utilizo una conexión con un servidor MySQL (usando la TDolphin de Daniel).
Esta conexión es para enviarle al servidor los datos que son extraídos de las DBF's, pero sólo los necesarios para que los clientes del taller que consultan el sitio web puedan ver el estado de sus reparaciones.
La cuestión es que el internet a veces se corta y cuando se va a actualizar un registro en el servidor se queda en espera un largo rato (si la señal de internet está cortada). Durante ese rato largo, la aplicación, como es lógico, queda impedida de seguirse utilizando. Cuando pasa ese rato, la aplicación informa del error y se puede seguir con ella.
Después de todo lo expuesto viene mi consulta:
¿Se puede detectar rápidamente desde la aplicación cuando la conexión con el servidor MySQL fue interrumpida?
Gracias.
Rolando
Re: Conexión MySQL Interrumpida - ¿Cómo detectarlo?
Rolando,
Puedes aplicarle un oServer:ping() y reconectará en automatico.
Creo que TDolphin la tiene implementada.
Saludos
Puedes aplicarle un oServer:ping() y reconectará en automatico.
Creo que TDolphin la tiene implementada.
Saludos
William, Morales
Saludos
méxico.sureste
Saludos
méxico.sureste
Re: Conexión MySQL Interrumpida - ¿Cómo detectarlo?
William,
Gracias por responder.
Ya había intentado con el ping(), pero si la conexión con el servidor está interrumpida tarda 19 segundos en indicarlo, lo cual es mucho tiempo para lo que necesito.
No es lo que quiero en realidad, pero por ahora voy a implementar una función de FWH , la "isinternet()" la cual demora 2 segundos en detectar la falta de internet en la red.
Como dije, no es lo que quiero. Lo que deseo es saber si se interrumpió la conexión con el server pero en un tiempo no mayor a los dos segundos.
Saludos y feliz día del trabajador al igual que para todos los colegas del foro.
Rolando
Gracias por responder.
Ya había intentado con el ping(), pero si la conexión con el servidor está interrumpida tarda 19 segundos en indicarlo, lo cual es mucho tiempo para lo que necesito.
No es lo que quiero en realidad, pero por ahora voy a implementar una función de FWH , la "isinternet()" la cual demora 2 segundos en detectar la falta de internet en la red.
Como dije, no es lo que quiero. Lo que deseo es saber si se interrumpió la conexión con el server pero en un tiempo no mayor a los dos segundos.
Saludos y feliz día del trabajador al igual que para todos los colegas del foro.
Rolando
- Daniel Garcia-Gil
- Posts: 2365
- Joined: Wed Nov 02, 2005 11:46 pm
- Location: Isla de Margarita
- Contact:
Re: Conexión MySQL Interrumpida - ¿Cómo detectarlo?
Hola
no hay forma automatica que mysql te envie una señal que se corto la comunicacion...
lo que yo implemento es lo siguiente...
1) funcion que me ejecuta los "queries", otra los "execute" de mi aplicacion
2) crear un timer, que esta siempre activo, que envia un ping cada "x" cantidad de segundos si existe un error en el proceso, activo un flag de reconexion, reconecto, apago el flag de reconexion... y como todos los queries y execute pasan por una funcion propia (punto 1) si el flag de reconexion esta activo espero hasta que cambie de estado para ejecutar la sentencia
no hay forma automatica que mysql te envie una señal que se corto la comunicacion...
lo que yo implemento es lo siguiente...
1) funcion que me ejecuta los "queries", otra los "execute" de mi aplicacion
2) crear un timer, que esta siempre activo, que envia un ping cada "x" cantidad de segundos si existe un error en el proceso, activo un flag de reconexion, reconecto, apago el flag de reconexion... y como todos los queries y execute pasan por una funcion propia (punto 1) si el flag de reconexion esta activo espero hasta que cambie de estado para ejecutar la sentencia
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Re: Conexión MySQL Interrumpida - ¿Cómo detectarlo?
Daniel,
Gracias por tu respuesta.
Voy a intentarlo de la manera que sugieres.
Saludos.
Rolando
Gracias por tu respuesta.
Voy a intentarlo de la manera que sugieres.
Saludos.
Rolando
Re: Conexión MySQL Interrumpida - ¿Cómo detectarlo?
Daniel,
Estoy intentando hacerlo como dices pero resulta el mismo problema.
Implementé un timer que llama a una función y, en esta función, hago el
Mientras el server este activo, no hay problemas porque es prácticamente "nada" lo que tarda en ejecutar el ping, pero si se da que la conexión con el server está cortada, el ping demora los 19 segundos antes de indicar un error y durante ese tiempo la aplicación queda bloqueada (no puede seguir mientras se ejecuta el oServer:ping()).
Ó quizás no entendí bien lo que me indicas. Gracias.
Rolando
Estoy intentando hacerlo como dices pero resulta el mismo problema.
Implementé un timer que llama a una función y, en esta función, hago el
Code: Select all
oServer:ping()
Ó quizás no entendí bien lo que me indicas. Gracias.
Rolando
Re: Conexión MySQL Interrumpida - ¿Cómo detectarlo?
No tengo idea de la solución de tu problema, pero se me ocurre que si el problema de la conexión con el servidor es a consecuencia de una falla en la conexión de internet ¿porque no creas un programa que te permita conectarte por un socket TCP/IP en el servidor? cuando realices la conexión con mysql te conectas también con el programa que te digo, en lugar de realizar ping con el servidor mysql revisa si se pierde la conexión alterna, si tu soket se desconecta sería el equivalente quiere decir que hay que volverse a conectar a mysql.
Saludos
Quique
Quique
Re: Conexión MySQL Interrumpida - ¿Cómo detectarlo?
Quique,
Gracias por responder.
La idea que planteas está correcta. Es lo mismo que dije de hacer usando la función FWH isinternet().
También podría ejecutar un php que tengo en el server para indicarme la ip pública de la red, pero esto tiene un tiempo de espera cuando se corta la conexión, que si bién es menor que el de un ping(), igual influye en el comportamiento de la aplicación, que como explicara, es híbrida y utiliza para todo DBF's con ADS en forma local. El MySQL se utiliza sólo para actualizar datos en un servidor externo y esos datos son usado en las consultas de los clientes del taller.
Por esto, cuando se guardan cambios en el estado de una reparación, _ van a una DBF pero además parte de _ se pasan a la bd mysql y, cuando la conexión está cortada (gracias a Dios no es siempre), demora 19 segundos en devolver el control a la aplicación luego de lo cual se detecta el error y se sigue con la aplicación.
Es un tema medio complicado por como lo uso. Supongo que lo que me sugería Daniel es porque él usa Harbour y tengo entendido que se puede usar multihilo, yo uso y tengo todo el sistema en xHarbour (no tiene multihilo).
Ya voy a ver como lo soluciono, calculo que haré otra aplicación dedicada a verificar la conexión al server informando de esto en algún archivo MEM para que pueda ser leído por la aplicación principal.
Saludos.
Rolando
Gracias por responder.
La idea que planteas está correcta. Es lo mismo que dije de hacer usando la función FWH isinternet().
También podría ejecutar un php que tengo en el server para indicarme la ip pública de la red, pero esto tiene un tiempo de espera cuando se corta la conexión, que si bién es menor que el de un ping(), igual influye en el comportamiento de la aplicación, que como explicara, es híbrida y utiliza para todo DBF's con ADS en forma local. El MySQL se utiliza sólo para actualizar datos en un servidor externo y esos datos son usado en las consultas de los clientes del taller.
Por esto, cuando se guardan cambios en el estado de una reparación, _ van a una DBF pero además parte de _ se pasan a la bd mysql y, cuando la conexión está cortada (gracias a Dios no es siempre), demora 19 segundos en devolver el control a la aplicación luego de lo cual se detecta el error y se sigue con la aplicación.
Es un tema medio complicado por como lo uso. Supongo que lo que me sugería Daniel es porque él usa Harbour y tengo entendido que se puede usar multihilo, yo uso y tengo todo el sistema en xHarbour (no tiene multihilo).
Ya voy a ver como lo soluciono, calculo que haré otra aplicación dedicada a verificar la conexión al server informando de esto en algún archivo MEM para que pueda ser leído por la aplicación principal.
Saludos.
Rolando
Re: Conexión MySQL Interrumpida - ¿Cómo detectarlo?
xharbour utiliza multihilo mucho antes que harbour, aunque no se si ya lo hayan corregido, pero tuve problemas al trabajar con fivewin y multihilos en xharbour, con harbour hasta ahorita no, pero ya casi no los uso.
La función isInternet() detecta la conexión contra la página de microsoft, lo que te sugerí es únicamente revisar la conexión contra el servidor de mysql, puede ser que la conexión se haya perdido momentaneamete y cuando revisas si isinternet() funciona ya se recuperó la conexión, pero bueno, era una idea, todavia habría que ver si funciona :p
La función isInternet() detecta la conexión contra la página de microsoft, lo que te sugerí es únicamente revisar la conexión contra el servidor de mysql, puede ser que la conexión se haya perdido momentaneamete y cuando revisas si isinternet() funciona ya se recuperó la conexión, pero bueno, era una idea, todavia habría que ver si funciona :p
Saludos
Quique
Quique
- TOTOVIOTTI
- Posts: 334
- Joined: Fri Feb 05, 2010 11:30 am
- Location: San Francisco - Córdoba - Argentina
Re: Conexión MySQL Interrumpida - ¿Cómo detectarlo?
Daniel
cada cuanto tiempo tu sugieres que se le haga ping a la base?
Yo lo hago cada 5 minutos, es mucho tiempo?
Gracias
cada cuanto tiempo tu sugieres que se le haga ping a la base?
Yo lo hago cada 5 minutos, es mucho tiempo?
Gracias
Re: Conexión MySQL Interrumpida - ¿Cómo detectarlo?
Hola TOTOVIOTTI,
Me podrías indicar como implementas el ping al servidor?
Si no lo haces desde multihilo, cuando la conexión se interrumpe, demora 19 segundos (una eternidad) en devolver el control al sistema.
Por esto te consulto, quizás yo no lo sepa hacer y tu sí. Gracias.
Rolando
Me podrías indicar como implementas el ping al servidor?
Si no lo haces desde multihilo, cuando la conexión se interrumpe, demora 19 segundos (una eternidad) en devolver el control al sistema.
Por esto te consulto, quizás yo no lo sepa hacer y tu sí. Gracias.
Rolando
- Daniel Garcia-Gil
- Posts: 2365
- Joined: Wed Nov 02, 2005 11:46 pm
- Location: Isla de Margarita
- Contact:
Re: Conexión MySQL Interrumpida - ¿Cómo detectarlo?
Hola
les comento que hacer ping al parecer no hace efecto alguno en mantener viva la conexion
probe de esta manera y me funciona bastante bien
les comento que hacer ping al parecer no hace efecto alguno en mantener viva la conexion
probe de esta manera y me funciona bastante bien
Code: Select all
define timer hObjs[ "TMR" ] interval 300000 /*5 minutos*/ of hObjs[ "MAIN" ];
action oSelf:StillAlive()
activate timer hObjs[ "TMR" ]
METHOD StillAlive() CLASS prog
hObjs[ "TMR" ]:deactivate()
if ! hObjs[ "SERVER" ]:Execute( "SET @dummy=0" )
//Colocal aqui las medidas a tomar si se pierde la conexion
endif
return nil
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Re: Conexión MySQL Interrumpida - ¿Cómo detectarlo?
Daniel,
Intenté hacerlo como indicas pero me da distintos errores.
Interpreto (quizás mal) que lo más importante sería el
Lo puse dentro de una función que llamo al presionar un botón y hace lo siguiente:
- Si la conexión con el server está bién, la aplicación sigue normalmente.
- Si la conexión con el servidor está interrumpida, demora los 20 segundos y luego se pierde dando error la aplicación.
Saludos.
Rolando
Intenté hacerlo como indicas pero me da distintos errores.
Interpreto (quizás mal) que lo más importante sería el
Code: Select all
if ! oServer:Execute( "SET @dummy=0" )
- Si la conexión con el server está bién, la aplicación sigue normalmente.
- Si la conexión con el servidor está interrumpida, demora los 20 segundos y luego se pierde dando error la aplicación.
Saludos.
Rolando
- Daniel Garcia-Gil
- Posts: 2365
- Joined: Wed Nov 02, 2005 11:46 pm
- Location: Isla de Margarita
- Contact:
Re: Conexión MySQL Interrumpida - ¿Cómo detectarlo?
Cuales errores?rolando wrote:Intenté hacerlo como indicas pero me da distintos errores.
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
- Daniel Garcia-Gil
- Posts: 2365
- Joined: Wed Nov 02, 2005 11:46 pm
- Location: Isla de Margarita
- Contact:
Re: Conexión MySQL Interrumpida - ¿Cómo detectarlo?
colocalo dentro de un try/catchrolando wrote:CODE: SELECT ALL EXPAND VIEW
if ! oServer:Execute( "SET @dummy=0" )
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9