【问题标题】:Ruby: Check for connectivityRuby:检查连接性
【发布时间】:2014-01-15 10:07:55
【问题描述】:

如何检查 Ruby 中是否存在网络连接?

到目前为止,我已经尝试过类似的东西

`ping -c 1 8.8.8.8`
unless $?
  abort("There was an error")
end

但是,如果没有一些容易获得且更好的方法来执行诸如此类的平凡任务,我会感到惊讶。

【问题讨论】:

  • 现在两个答案都提高了!
  • 没有冒犯,但为什么呢?我以前什至没见过这些问题

标签: ruby shell command-line


【解决方案1】:

一个简单的方法是尝试打开一个套接字,如果它失败了,那么你就没有连接。与以更特定于操作系统的方式检查状态位相比,这是一项昂贵的操作,但它既简单又有效。

require 'open-uri'

def connected?
  open("http://example.com/") rescue false
end

【讨论】:

  • 是的,我认为这个操作可能比我想要的要重。我的目标是类似于只发送几个包(比如 ping,但手动运行系统命令感觉有点愚蠢)
  • 启动一个 shell 来生成一个打开套接字的进程肯定比仅仅打开套接字更昂贵,所以这至少应该比ping 方法快一点。
  • Ruby 中的每个系统调用都会产生一个新的 shell 吗?如果是这样,我必须重新调整我的 Ruby 心态。
  • 反引号中的每个命令都会生成一个 shell。 Ruby 不会自己解释 sh/bash。
猜你喜欢
  • 1970-01-01
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
  • 2014-04-15
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多