Соединение ruby ​​net / http очень медленное - PullRequest
4 голосов
/ 30 марта 2012

Когда я работаю с net/http в разработке, это очень медленно. Я установил net-http-spy gem, чтобы получить некоторую информацию о каждом запросе, и обнаружил, что часть «открытие соединения» занимает больше всего времени (более 10 секунд). Более того, он не поддерживает соединения, поэтому его нужно открывать при каждом запросе.

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

Можно ли как-нибудь улучшить производительность библиотеки net/http, установив некоторые из ее значений по умолчанию? Я не хочу конкретного исправления запроса, но что-то, что решило бы проблему глобально. Я использую geokit gem в текущем проекте, и я не могу изменить способ внутренней обработки запроса, кроме знания того, что он использует net/http, и он отлично работает на производстве (Heroku), но чрезвычайно медленен в разработке.

Я использую ruby ​​1.9.2-p290 на Mac OS X Lion. 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 секунд.

Ответы [ 3 ]

19 голосов
/ 15 декабря 2014

Старая проблема, но у меня недавно была такая же проблема.

Кажется, это проблема с некоторыми версиями libc, которые разрешают маршруты DNS.Потратив пару часов на поиск решения, вам просто нужно добавить require 'resolv-replace' в начале вашего кода.

Дополнительная информация: https://github.com/ruby/ruby/pull/597#issuecomment-40507119

Надеюсь, это поможет кому-нибудь в будущем.

2 голосов
/ 14 апреля 2012

Это была проблема с DNS-сервером. Переключился на публичный гугл DNS (8.8.8.8, 8.8.4.4). Спасибо @ Ineu.

0 голосов
/ 09 апреля 2017

В конце концов, для меня решена проблема с отключением антивируса. У меня есть Norton Security

...