2012-09-28 10 views
5

Tengo un cliente ruby ​​tcpsocket que está conectado a un servidor.reconectar tcpsocket (o cómo detectar el socket cerrado)

¿Cómo puedo verificar si el socket está conectado antes de enviar los datos?

¿Trato de "rescatar" un tcpsocket desconectado, volver a conectarlo y volver a enviarlo? en caso afirmativo, ¿alguien tiene una muestra de código simple, ya que no sé por dónde empezar :(

Estaba bastante orgulloso de haber logrado obtener un tcpsocket de cliente conectado persistente en rieles. Entonces el servidor decidió matar al cliente y todo se vino abajo;)

edición

he utilizado este código para recibir todo el año algunos de los problemas - que intentará volver a conectarse si no está conectado, pero no manejará el caso si el el servidor está inactivo (se mantendrá reintentado). ¿Es este el comienzo del enfoque correcto? Gracias

def self.write(data) 
    begin 
    @@my_connection.write(data) 
    rescue Exception => e 
    @@my_connection = TCPSocket.new 'localhost', 8192 
    retry 
    end 
end 

Respuesta

1

Lo que suele hacer en este tipo de escenarios es llevar la cuenta de reintentos consecutivos en una variable y tienen alguna otra variable que fija el techo de reintento. Una vez que lleguemos al techo, arroje algún tipo de excepción que indique que hay un problema de red o servidor. Querrá restablecer la variable de recuento de reintentos si tiene éxito, por supuesto.

+0

Además, debe haber un método cerrado en el socket. Estoy un poco oxidado pero probado/confirmado fácilmente en irb/pry –

Cuestiones relacionadas