Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 重新连接tcpsocket(或如何检测关闭的套接字)_Ruby_Ruby On Rails 3 - Fatal编程技术网

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

Ruby 重新连接tcpsocket(或如何检测关闭的套接字),ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,我有一个连接到服务器的ruby tcpsocket客户端 在发送数据之前,如何检查套接字是否已连接 我是否尝试“拯救”断开的tcpsocket,重新连接然后重新发送?如果是这样,是否有人有一个简单的代码示例,因为我不知道从哪里开始:( 我很自豪我成功地在rails中获得了一个持久连接的客户机tcpsocket。然后服务器决定杀死客户机,它就崩溃了;) 编辑 我用这段代码解决了一些问题——如果未连接,它将尝试重新连接,但如果服务器关闭,它将无法处理该情况(它将继续重试)。这是正确方法的开始吗?谢谢

我有一个连接到服务器的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

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

此外,套接字上应该有一个关闭的方法。我有点生锈,但很容易在irb/pry中测试/确认