ruby - 重新连接 tcpsocket(或如何检测已关闭的套接字)

标签 ruby ruby-on-rails-3

我有一个连接到服务器的 ruby​​ tcpsocket 客户端。

在发送数据之前如何检查套接字是否已连接?

我是否尝试“拯救”断开连接的 tcpsocket,重新连接然后重新发送?如果是这样,有没有人有一个简单的代码示例,因为我不知道从哪里开始:(

我很自豪我设法在 rails 中获得了一个持久连接的客户端 tcpsocket。然后服务器决定杀死客户端,一切都崩溃了;)

编辑

我已经使用此代码解决了一些问题 - 如果未连接,它将尝试重新连接,但如果服务器已关闭则不会处理这种情况(它将继续重试)。这是正确方法的开始吗?谢谢

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

最佳答案

在这些类型的场景中,我通常做的是跟踪一个变量中的连续重试,并使用其他一些变量来设置重试上限。一旦我们达到顶峰,抛出某种类型的异常,表明存在网络或服务器问题。当然,您需要在成功时重置重试计数变量。

关于ruby - 重新连接 tcpsocket(或如何检测已关闭的套接字),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12645474/

相关文章:

Ruby 嵌套发送

ruby-on-rails - 无法在 Heroku 上为我的 Rails 应用程序提供种子文件

ruby-on-rails - roo 库是否适用于 Ruby 2.0?

ruby-on-rails - 在 centos 中找不到 ruby​​ 1.8.7 的文件 extconf.rb?

ruby-on-rails - 为什么 Rails 会对使用哪个 Ruby 感到困惑?

ruby-on-rails - rails : Validate unique combination of 3 columns

ruby-on-rails - 半固定 : Missing `secret_key_base` for 'production' environment

ruby-on-rails - 在 Rails 应用程序的 link_to 中使用 algolia 索引属性

ruby-on-rails - 运行 1 次任务以在 Ruby 中将值输入数据库

rake - Rake 任务中未初始化的常量