FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Conexi贸n MySQL Interrumpida - 驴C贸mo detectarlo?
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Conexi贸n MySQL Interrumpida - 驴C贸mo detectarlo?
Posted: Wed May 01, 2013 05:28 PM

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 :D

Posts: 1076
Joined: Fri Oct 07, 2005 10:41 PM
Re: Conexi贸n MySQL Interrumpida - 驴C贸mo detectarlo?
Posted: Wed May 01, 2013 08:30 PM

Rolando,

Puedes aplicarle un oServer:ping() y reconectar谩 en automatico.

Creo que TDolphin la tiene implementada.

Saludos

William, Morales

Saludos



m茅xico.sureste
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Conexi贸n MySQL Interrumpida - 驴C贸mo detectarlo?
Posted: Wed May 01, 2013 10:26 PM

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 :D

Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Conexi贸n MySQL Interrumpida - 驴C贸mo detectarlo?
Posted: Thu May 02, 2013 11:44 AM

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

Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Conexi贸n MySQL Interrumpida - 驴C贸mo detectarlo?
Posted: Thu May 02, 2013 01:15 PM

Daniel,

Gracias por tu respuesta.

Voy a intentarlo de la manera que sugieres.

Saludos.

Rolando :D

Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Conexi贸n MySQL Interrumpida - 驴C贸mo detectarlo?
Posted: Thu May 02, 2013 11:27 PM
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

Code (fw): Select all Collapse
oServer:ping()


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 :-)
Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: Conexi贸n MySQL Interrumpida - 驴C贸mo detectarlo?
Posted: Fri May 03, 2013 02:58 PM

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
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Conexi贸n MySQL Interrumpida - 驴C贸mo detectarlo?
Posted: Fri May 03, 2013 03:19 PM

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, los cambios van a una DBF pero adem谩s parte de esos cambios 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

Posts: 408
Joined: Sun Aug 13, 2006 05:38 AM
Re: Conexi贸n MySQL Interrumpida - 驴C贸mo detectarlo?
Posted: Fri May 03, 2013 03:40 PM

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

Saludos

Quique
Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Re: Conexi贸n MySQL Interrumpida - 驴C贸mo detectarlo?
Posted: Sat May 11, 2013 12:03 PM

Daniel
cada cuanto tiempo tu sugieres que se le haga ping a la base?
Yo lo hago cada 5 minutos, es mucho tiempo?
Gracias

Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Conexi贸n MySQL Interrumpida - 驴C贸mo detectarlo?
Posted: Sat May 11, 2013 12:59 PM

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 :D

Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Conexi贸n MySQL Interrumpida - 驴C贸mo detectarlo?
Posted: Sat May 11, 2013 11:01 PM
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

Code (fw): Select all Collapse
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
Posts: 593
Joined: Sat May 12, 2007 11:47 AM
Re: Conexi贸n MySQL Interrumpida - 驴C贸mo detectarlo?
Posted: Sun May 12, 2013 01:47 AM
Daniel,

Intent茅 hacerlo como indicas pero me da distintos errores.

Interpreto (quiz谩s mal) que lo m谩s importante ser铆a el

Code (fw): Select all Collapse
if ! oServer:Execute( "SET @dummy=0" )


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 :-)
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Conexi贸n MySQL Interrumpida - 驴C贸mo detectarlo?
Posted: Sun May 12, 2013 02:36 AM
rolando wrote:Intent茅 hacerlo como indicas pero me da distintos errores.


Cuales errores?
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Conexi贸n MySQL Interrumpida - 驴C贸mo detectarlo?
Posted: Sun May 12, 2013 02:39 AM
rolando wrote:CODE: SELECT ALL聽聽EXPAND VIEW
if ! oServer:Execute( "SET @dummy=0" )


colocalo dentro de un try/catch