Ruby в Python Virtualenv HTTP Post Request очень медленно на стороне клиента - PullRequest
0 голосов
/ 31 декабря 2018

Я в настоящее время застрял с проблемой времени отклика с библиотекой HTTP Фарадея.Я использую следующий код для инициализации запроса POST к серверу, работающему на моей локальной машине 127.0.0.1.Сервер возвращает допустимую строку JSON.Код для инициализации объекта Фарадея на стороне клиента выглядит следующим образом:

url = 'http://127.0.0.1'

conn = Faraday.new(:url => url) do |faraday|
  faraday.request  :url_encoded
  faraday.response :json, :content_type => 'application/json'
  faraday.adapter  Faraday.default_adapter
end

Затем я отправляю строку JSON через запрос POST на сервер.Код для отправки запроса выглядит следующим образом (размер текста до 5000 символов):

payload = {:language => 'en', :text => 'some text'}.to_json

response = conn.post do |req|
  req.url '/api'
  req.headers['Content-Type'] = 'application/json'
  req.body = payload
end

Ожидаемый результат - строка JSON следующей структуры:

{
  "level1.1" : [
     {
       "level2.1" : [
          {
            "value1" : "Text",
            "value2" : "Text",
            "value(...)" : "Text",
            "value(n)" : "Text"
          },
          {...
          }
        ],
<and so on... - of course in a valid JSON structure ending>

Когда язапустить код, ничего не делая с результатом, который он выполняет довольно хорошо и заканчивается за разумное время (<0,5 с).Но как только я пытаюсь получить доступ к объекту ответа, сценарий становится ужасно медленным. </p>

Просто добавив строку:

p response.body

Время обработки увеличивается до> 8 с.

Я проверил ответ сервера почтальоном, и он работает абсолютно нормально, без каких-либо видимых проблем.Время отклика в Почтальоне также> 0,5 с.Замедление появляется только на стороне клиента, когда я пытаюсь получить доступ к объекту ответа.Простая проверка объекта ответа также не влияет на время обработки.Но как только я начинаю «что-то делать» с ответом, он становится ужасно медленным.

Я использую Ruby 2.5.3 и Faraday 0.15.4 / Middleware 0.12.2

AnyИдея, которая может вызвать это замедление, очень ценится.

Krid

EDIT

Несмотря на мой комментарий, что HTTParty решил эту проблему, это было просто из-заменьшая полезная нагрузка.HTTParty и Faraday оба плохо работают на моем POST-запросе, в то время как POST-запрос от Postman выполняется очень быстро даже при больших нагрузках.Я понятия не имею, что вызывает такое различное поведение во время выполнения при запросе к одному и тому же серверному приложению с одинаковой полезной нагрузкой.

Как уже говорилось, любые идеи, которые могут указывать мне в правильном направлении, очень ценятся.

Крид

1 Ответ

0 голосов
/ 03 января 2019

... после нескольких дней поиска решения я наконец нашел проблему.Когда у вас есть Python и Ruby-код, объединенный в папке, которая связана с Python virtualenv (и, конечно, с активированным Python env), у Ruby, очевидно, возникают проблемы с разрешением локального адресного пространства.Это работает, но требуются некоторые странные обходные пути, которые делают все это ужасно медленным.

Мое решение: я переместил код Ruby, который должен проигрываться вместе с кодом Python через HTTP-соединения, в папку вне кода Pythonпапка.

...