Funciones remotas - comprobar servidor remoto

vForum público de la plataforma de desarrollo Velneo

Moderador: vCoaches

Responder
synetic
vMate
vMate
Mensajes: 59
Registrado: 03 Nov 2008, 21:34

Funciones remotas - comprobar servidor remoto

Mensaje por synetic » 22 Oct 2009, 18:31

Hola a todos,
Tengo un demonio que envía tickets de venta por función remota a un servidor.

El problema ocurre cuando, por el motivo que sea (cae el adsl, problemas en la central) la función remota no es capaz de conectar con el servidor. La operación de queda ahí enganchada y no se permite hacer nada en el servidor.

No admite nuevas operaciones y se detiene el funcionamiento normal del resto de clientes y los TPV que están generando tickets tienen gran actividad.

He comprobado, si no tiene carga, que tarda unos 20 segundos en detectar que no puede conectar con el servidor para ejecutar la función remota. En el peor de los casos el servidor queda bloqueado y hay que matar el proceso.

- Es posible bajar ese tiempo de timeout?
- Hay alguna dll o aplicación que pueda ejecutar antes para comprobar si una ip y un puerto concreto está abierto? Esto lo podría ejecutar antes de la función remota si ok.

gracias por las respuestas

Jonatan
vAdviser
vAdviser
Mensajes: 600
Registrado: 13 Nov 2006, 17:17
Ubicación: México
Contactar:

remoto

Mensaje por Jonatan » 22 Oct 2009, 18:49

Quizá si antes haces un ping a la dirección ip:690 antes de lanzar la función remota para comprobar que el servidor esté activo.

Saludos cordiales
Alveus Soft
México, D.F.
http://microsip.wordpress.com/
http://twitter.com/rosper
http://www.solucionesmicrosip.com
Alveus Soft. CRM y Carrito de compra web.

filipeagg
vAdviser
vAdviser
Mensajes: 485
Registrado: 02 May 2008, 17:49
Ubicación: Zamora y Portugal

Mensaje por filipeagg » 22 Oct 2009, 18:54

Incluso lo puedes hacer con funciones tcp/ip. estas si tienen timeout.

Inicias tcp/ip para comprobar la conexion y si ok, ejecutas la funcion remota.
Filipe Gomes
Programador y consultor SEO

Jonatan
vAdviser
vAdviser
Mensajes: 600
Registrado: 13 Nov 2006, 17:17
Ubicación: México
Contactar:

ping

Mensaje por Jonatan » 22 Oct 2009, 19:02

Este código vbs podría ayudarte, en un bloc de notas copia este código y nombra al archivo ping.vbs

Set objShell = CreateObject("WScript.Shell")
Set objWshScriptExec = objShell.Exec("ping 192.168.1.250")
Set objStdOut = objWshScriptExec.StdOut
Do Until objStdOut.AtEndOfStream
strLine = objStdOut.ReadLine
WScript.Echo Now & " -- " & strLine
Loop

En la consola de windos (cmd) ejecuta el siguiente comando:

cscript ping.vbs > ping_res.txt

Se creará un archivo llamado ping_res.txt con el resultado del ping, el cual puedes leer con velneo.

Saludos cordiales
Alveus Soft
México, D.F.
http://microsip.wordpress.com/
http://twitter.com/rosper
http://www.solucionesmicrosip.com
Alveus Soft. CRM y Carrito de compra web.

Avatar de Usuario
Adelo Herrero
vAdviser
vAdviser
Mensajes: 714
Registrado: 21 Sep 2005, 14:42
Ubicación: Requena (Valencia) - España - (Lat: 39.490701 * Lon: -1.102329 )
Contactar:

Mensaje por Adelo Herrero » 22 Oct 2009, 19:33

Que yo sepa no se puede hacer un ping a un puerto específico y, por otro lado, puedes tener respuesta al ping pero estar caído el servidor, así que necesitas saber si el servidor está activo.

Yo también probaría con tcp/ip.

Un saludo.

synetic
vMate
vMate
Mensajes: 59
Registrado: 03 Nov 2008, 21:34

Mensaje por synetic » 22 Oct 2009, 20:33

Podéis darme unas pinceladas de como se haría con tcp/ip?

Estoy probando con ping (ejecutado directamente con "ejecutar comando dos") y almacenando la respuesta puede ser una solución pero como dice Adelo no comprueba el puerto y el servicio.
Voy a probar tambien con hping y nmap para ver el resultado.

Lo dicho, si podéis dame unos pasos generales de como se usa tcp/ip (hasta ahora no he tenido necesidad) os lo agradecería.

manugc
vAdviser
vAdviser
Mensajes: 775
Registrado: 15 Sep 2006, 17:02
Ubicación: Las Palmas - Islas Canarias - Gran Canaria

Mensaje por manugc » 01 Ago 2011, 19:23

Voy a revivir este post.

¿Alguien sabe como se puede hacer la comprobación de si está el servidor activo en ese puerto?

filipeagg
vAdviser
vAdviser
Mensajes: 485
Registrado: 02 May 2008, 17:49
Ubicación: Zamora y Portugal

Mensaje por filipeagg » 01 Ago 2011, 23:22

No se si te servirá, pero se abres la linea de comandos de dos y escribes:

telnet 192.168.0.105 25

Esto significa que intentas conectar por telnet a la ip 192.168.0.105 en el puerto 25.
Si te abre una ventana con todo en negro el puerto está abierto, si no no lo está o está inactivo.

Es una tecnica que uso para verificar si um puerto está abierto manualmente, no se como será la implementación para que el software lo haga automaticamente.
Filipe Gomes
Programador y consultor SEO

synetic
vMate
vMate
Mensajes: 59
Registrado: 03 Nov 2008, 21:34

Mensaje por synetic » 02 Ago 2011, 08:37

Hola manugc,
Te cuento al final como lo resolví porque me equivoqué desde el planteamiento inicial.
Probé muchas herramientas de consola que conectaban al puerto indicado (nmap, telnet, una aplicación de Microsoft que no recuerdo como se llama, etc..) pero todas tenían algún problema. O no daban la salida, o no tenían posibilidad de timeout.... Siento decirte que no puede dar con una solución que funcionara al 100%.

El caso es que después de muchas pruebas y con el tiempo me di cuenta que, para mi entender, el vServer no puede, no debe mejor dicho, hacer otras funciones distintas de aquello para lo que fue diseñado, escribir en tablas y gestionar conexiones.

Intenté que el vServer comprobara el puerto de conexión, intenté que el vServer gestionara el envío de mail, en otra ocasión que gestionara alertas, etc... O demoraba mucho o rompía. Hay que liberar al vServer de esas tareas y de cualquier ejecución de programas externos.

La manera en que resolví esto fue que en vez de que el vServer realizara la conexión con la central, fuese un vclient ejecutado en el propio servidor y conectado al vServer en la propia máquina, realizara la tarea enviando las funciones remotas, recibiendo datos y actualizando tablas.

Esta forma me ha funcionado sin problemas con una central y cuatro delegaciones. Se actualizan datos (lanza la función remota) cada 30 segundos.

Espero haberte ayudado.
Saludos

Responder