我在尝试通过TCPSocket连接到不可用的远程资源时遇到问题。它只是无限期地挂起而没有超时。理想情况下,我希望它每2分钟左右尝试重新连接,但TCPSocket.new调用似乎阻止了。我尝试过使用timeout()但是也没有做任何事情。在IRB实例中尝试相同的调用完全正常,但是当它在Rails中时,它会失败。任何人都可以解决这个问题吗?
我的代码如下所示:
def self.connect!
@@connection = TCPSocket.new IP, 4449
end
def self.send(cmd)
puts "send "
unless @@connection
self.connect!
end
loop do
begin
@@connection.puts(cmd)
return
rescue IOError
sleep(self.get_reconnect_delay)
self.connect!
end
end
end
答案 0 :(得分:0)
不幸的是,目前无法直接在TCPSocket上设置超时。
有关功能请求,请参阅http://bugs.ruby-lang.org/issues/5101。您将使用基本的Socket类并设置套接字选项。