Как делать параллельные HTTP-запросы в Heroku? - PullRequest
7 голосов
/ 03 ноября 2010

Я создаю приложение Ruby on Rails, которое имеет доступ к 6-7 API-интерфейсам, извлекает из них информацию на основе данных пользователя, сравнивает и отображает результаты пользователям (информация не сохраняется в базе данных). Я буду использовать Heroku для развертывания приложения. Мне бы хотелось, чтобы эти HTTP-запросы для доступа к API-интерфейсам выполнялись параллельно, поэтому время ответа лучше, чем последовательное. Как вы думаете, как лучше всего добиться этого в Heroku?

Большое спасибо за любые предложения!

Ответы [ 4 ]

6 голосов
/ 17 августа 2011

Если вы хотите на самом деле выполнять запросы на стороне сервера (решение tfe для javascript - хорошая идея), вам лучше всего использовать EventMachine . Использование EventMachine дает простой способ сделать неблокирующий ввод-вывод.

Также проверьте EM-Synchrony для набора клиентов с поддержкой волоконно-оптических сетей Ruby 1.9 (включая HTTP).

Все, что вам нужно сделать для неблокирующего HTTP-запроса, это что-то вроде:

require "em-synchrony"
require "em-synchrony/em-http"
EM.synchrony do
    concurrency = 2
    urls = ['http://url.1.com', 'http://url2.com']

    # iterator will execute async blocks until completion, .each, .inject also work!
    results = EM::Synchrony::Iterator.new(urls, concurrency).map do |url, iter|

        # fire async requests, on completion advance the iterator
        http = EventMachine::HttpRequest.new(url).aget
        http.callback { iter.return(http) }
        http.errback { iter.return(http) }
    end

    p results # all completed requests
    EventMachine.stop
end

Гудлак!

2 голосов
/ 04 ноября 2010

Вы всегда можете делать запросы на стороне клиента, используя Javascript.Тогда вы не только сможете запускать их параллельно, но вам даже не понадобится обратное путешествие на ваш собственный сервер.

1 голос
/ 12 ноября 2010

Я не пробовал распараллеливать подобные запросы. Но я попробовал параллель на героку, работает как шарм! Это мой простой пост в блоге об этом.

http://olemortenamundsen.wordpress.com/2010/10/17/spawning-multiple-threads-at-heroku-using-parallel/

0 голосов
/ 03 ноября 2010

Посмотрите на создание каждого запроса в качестве фонового задания: http://blog.heroku.com/archives/2009/7/15/background_jobs_with_dj_on_heroku/

Чем больше «Рабочих» вы покупаете у Heroku, тем больше фоновых заданий может обрабатываться одновременно, и ваши «Динос» могут обслуживаться.ваши пользователи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...