0

通过 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
4

1 回答 1

0

不幸的是,目前没有办法直接在 TCPSocket 上设置超时。

有关功能请求,请参阅http://bugs.ruby-lang.org/issues/5101。您将使用基本的 Socket 类并设置套接字选项。

于 2012-11-24T14:58:35.080 回答