【问题标题】:ruby net/http opening connection very slowruby net/http 打开连接很慢
【发布时间】:2012-04-13 22:43:30
【问题描述】:

当我在开发中使用net/http 时,速度非常慢。我已经安装了net-http-spy gem 来获取有关每个请求的一些信息,并且我发现“打开连接”部分花费的时间最多(超过 10 秒)。此外,它不会保持连接处于活动状态,因此需要在每次请求时重新打开它。

opening connection to maps.google.com...
# ~10 seconds
opened

有什么方法可以通过设置一些默认值来以某种方式提高net/http 库的性能?我不想要特定于请求的修复,而是可以在全球范围内解决问题的东西。我在当前项目中使用geokit gem,除了知道它正在使用net/http 之外,我无法更改它在内部处理请求的方式,它在生产(Heroku)上运行良好,但开发速度极慢。

我在 Mac OS X Lion 上使用 ruby​​ 1.9.2-p290。 Ruby 使用 rbenv 安装和管理。


这里是示例代码:

require 'net/http'
require 'uri'

time = Time.now.to_i
uri = URI.parse("http://maps.google.com/maps/geo?q=Chicago&output=xml&oe=utf-8")

Net::HTTP.get(uri)
puts (Time.now.to_i - time)

Net::HTTP.get(uri)
puts (Time.now.to_i - time)

我放在那里的 URL 并不重要。每个请求总是需要 10 秒..

【问题讨论】:

  • 我们无法帮助诊断没有代码的代码问题。 Net::HTTP 正常打开连接不需要十秒钟,除非机器严重超载,或者你连接的主机响应慢。
  • 我已经添加了示例代码。我请求什么远程 URL 或者机器是否超载并不重要,每次请求总是需要 10 秒。这真的很奇怪。
  • 尝试使用 ip 地址而不是名称。如果问题消失了,则说明您的 dns 服务器有问题。
  • 谢谢@Ineu!就是这样。我切换到谷歌公共 dns,现在它就像一个魅力!

标签: ruby net-http


【解决方案1】:

老问题,但我最近遇到了同样的问题。

解析 DNS 路由的某些版本的 libc 似乎存在问题。花几个小时搜索解决方案后,您只需在代码开头添加require 'resolv-replace'

更多信息:https://github.com/ruby/ruby/pull/597#issuecomment-40507119

希望这对将来的某人有所帮助。

【讨论】:

    【解决方案2】:

    这是 DNS 服务器的问题。切换到谷歌公共 DNS(8.8.8.8、8.8.4.4)。谢谢@Ineu。

    【讨论】:

      【解决方案3】:

      最终为我解决问题的是禁用防病毒软件。我有 Norton Security

      【讨论】:

        猜你喜欢
        • 2015-12-30
        • 1970-01-01
        • 2014-09-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-27
        • 1970-01-01
        • 2016-08-11
        相关资源
        最近更新 更多