2012-09-28 11 views
5

Ich habe einen Ruby Tcpsocket Client, der mit einem Server verbunden ist.tcpsocket wiederverbinden (oder wie man geschlossenen Socket erkennt)

Wie kann ich überprüfen, ob der Socket angeschlossen ist, bevor ich die Daten sende?

Versuche ich, einen getrennten tcpsocket zu "retten", erneut zu verbinden und dann erneut zu senden? Wenn ja, hat jemand ein einfaches Codebeispiel, da ich nicht weiß, wo ich anfangen soll :(

Ich war ziemlich stolz, dass ich es geschafft habe, einen dauerhaft verbundenen Client tcpsocket in Schienen zu bekommen. Dann entschied der Server, den Client zu töten und alles fiel auseinander;)

bearbeiten

ich diesen Code verwendet haben rund um einige der Probleme zu bekommen - es wird versuchen, wieder zu verbinden, wenn nicht angeschlossen, aber nicht den Fall behandeln, wenn die Server ist ausgefallen (es wird immer wieder versuchen). Ist dies der Beginn des richtigen Ansatzes? Dank

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

Antwort

1

Was ich in dieser Art von Szenarien in der Regel tun, ist in einer variablen Spur von aufeinanderfolgenden Wiederholungen halten und eine andere Variable, die das Wiederholungs Dach setzt. Sobald wir das Dach erreicht haben, werfen Sie eine Art von Ausnahme, die anzeigt, dass ein Netzwerk- oder Serverproblem vorliegt. Sie sollten die Wiederholungszählervariable bei Erfolg des Kurses zurücksetzen.

+0

Auch sollte es eine geschlossene Methode auf Socket sein. Ich bin ein wenig eingerostet, aber leicht getestet/bestätigt in irb/py –

Verwandte Themen