2013-11-16 3 views
0

Я разрабатываю приложение, и на одной странице он требует примерно 12-15 запросов GET для API в фоновом режиме. Мое первоначальное намерение заключалось в том, чтобы делать запросы с использованием AJAX из jQuery, но оказывается, что это невозможно сделать с использованием API веб-интерфейса Steam, который я использую.Несколько запросов GET в Rails?

Выполнение этого в контроллере Rails до загрузки страницы по очевидным причинам очень медленное.

После того как я получу данные из API, я проанализирую его и отправлю его на JavaScript с помощью gon. Проблема в том, что я не знаю, как получить и установить данные после страницы.

Вот что мой контроллер будет выглядеть следующим образом:

def index 
    @title = "My Stats" 
    if not session.key?(:current_user) then 
    redirect_to root_path 
    else 
    gon.watch.winlossdata = GetMatchHistoryRawData(session[:current_user][:uid32]) 
    end 
end 

GetMatchHistoryRawData Функцией является вспомогательной функцией, которая звонит запросы GET.

+4

Почему бы не сделать запросы ajax на ваш контроллер вместо прямого доступа к пару? – stevebot

+0

Пробовал это! Это сработало. Благодаря тонну. – Nick

ответ

1

Используя когда это драгоценный камень - (возможно, смотри ниже) ....

Установите значение в таблице базы данных очереди перед отображением страницы. Используя задачу «cron» (всякий раз, когда gem), которая контролирует таблицу очередей, вы можете отправлять запросы в API Steam и заполнять таблицу результатов очереди. На отображаемой странице вы можете выполнить периодическую проверку JavaScript с помощью AJAX для контроля таблицы результатов очередей и заполнения страницы, как только API вернет результат.

Дополнительная информация:

я не использовал, когда драгоценный камень, но пока я сделал еще некоторое чтение на него, и там может быть проблема с интервалом не быть достаточно коротким, чтобы сделать его как можно ближе к реальному времени, насколько это возможно , В настоящее время я занимаюсь обработкой своей работы с помощью приложения Java, использующего таймер, но задаюсь вопросом о переходе в любой момент и в CRON. Поэтому всякий раз, когда вы не можете работать на вас, но идея асинхронного процессора, выполняющего работу с API, является сутью моего ответа. Если полезная нагрузка из API Steam небольшая и достаточно быстро возвращается, то, как было сказано выше, вы можете использовать прямой вызов через AJAX для контроллера, а затем API Steam.

Что касается кода Rails, он должен быть довольно стандартным.

контроллер:

def index 
    # Create a Steam API Queue row in the database and save any pertinent information needed for contacting the Steam API 
    @unique_id = Model.id # some unique id created for the Steam API queue row 
end 

# AJAX calls START 
def get_api_result 
    # Check for a result using 
    params[:unique_id] 
    # render partial for <div> 
end 
# AJAX calls end 

Вид: индекс

# Display your page  
# Setup an intermittent AJAX call to "controller#get_api_result" with some unique id #{@unique_id} i.e. params[:unique_id] to identify the Steam API Queue table row, populate the result of the call into a <div> 

external_processor_code (Всякий раз, когда реализация Gem, Java, некоторые процессоры работы, и т.д ...)

Несколько потоков должны быть доступны обрабатывать таблицу очередей Steam API и получать результаты каждые несколько секунд и заполнять таблицу результатов, которая будет считываться контроллером по запросу через вызов AJAX.

Чтобы дать полный пример такого типа реализации, потребуется некоторое время, поэтому я кратко, с концептуального уровня, изложил его выше. Могут быть некоторые другие способы сделать это, что может быть более эффективным с тем, как расширяется технология, поэтому, пожалуйста, сделайте некоторое расследование.

Надеюсь, это полезно!

+0

Можете ли вы привести пример того, как это будет работать? Это звучит как идеальное решение. – Nick

Смежные вопросы