5

当我net/http在开发中工作时,它非常缓慢。我安装了net-http-spygem 以获取有关每个请求的一些信息,并且我发现“打开连接”部分花费的时间最多(超过 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 秒..

4

3 回答 3

29

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

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

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

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

于 2014-12-15T13:37:42.420 回答
2

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

于 2012-04-14T12:15:09.293 回答
-1

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

于 2017-04-09T08:25:06.283 回答