2012-09-28 9 views
5

Mam klienta ruby ​​tcpsocket, który jest podłączony do serwera.ponownie podłącz tcpsocket (lub jak wykryć zamknięte gniazdo)

Jak mogę sprawdzić, czy gniazdo jest podłączone przed wysłaniem danych?

Czy próbuję "uratować" odłączony tcpsocket, ponownie połączyć, a następnie wysłać ponownie? jeśli tak, czy ktoś ma prosty przykład kodu, ponieważ nie wiem od czego zacząć :(

Byłem bardzo dumny, że udało mi się uzyskać trwałe połączenie tcpsocket z klientem w szynach, a następnie serwer zdecydował się zabić klienta i to wszystko rozpadło;)

edit

Użyłem tego kodu, aby obejść niektóre z problemów - będzie starał się ponownie, jeśli nie jest podłączony, ale nie poradzi sobie w przypadku, gdy serwer jest wyłączony (będzie kontynuował ponawianie próby). Czy to początek właściwego podejścia? Dzięki

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

Odpowiedz

1

Co zwykle zrobić w tego typu sytuacjach jest śledzenie kolejnych prób w zmiennej i mieć jakąś inną zmienną, która ustawia dach ponowić próbę. Po dotarciu na dach należy podać wyjątek wskazujący na problem z siecią lub serwerem. Będziesz chciał zresetować zmienną liczby powtórzeń po sukcesie oczywiście.

+0

Ponadto powinna istnieć zamknięta metoda na gnieździe. Jestem trochę zardzewiały, ale łatwo przetestowany/potwierdzony w irb/pry –

Powiązane problemy