0

WebRick で実行される Rails アプリがあります。

私が今理解したように、それは単一のインスタンスとして実行されるため、一度に 1 つの要求 (アプリケーション メソッド呼び出し) しか処理できません。そのため、アプリが新しいリクエストが到着する前に各リクエストを処理できない場合、複数のリクエストがキューに入れられます (トピック外: ?? または Web サーバー [webrick、nginx] が処理しますか??)。デフォルトでPhusion Passengerと同じですか(私のアプリは一度に1つのリクエストしか処理できないのですか、それとも設定可能ですか?)

同様のユースケースが 2 つあります。

3 つの AJAX リクエストが同じデータで送信される場合 (たとえば、同じリクエスト)

same_data_ajax

$('#cancel_search').click (e) ->
  console.log("DEBUG: send ajax_cancel_search")
  $.ajax
    type: 'get'
    url: "/app/cancel"
    data: {attempt: 1}
    dataType: "json"
    error: (error) ->
      console.log('DEBUG: ERROR: [app/cancel ' + document.cancel_cnt + '] returned an error!' + JSON.stringify(error)) # not really reliable with document.cancel_cnt, but this case doesn't matter
      # ...
      return
    success: (data) ->
      console.log('DEBUG: OK: [app/cancel ' + data.current_attempt + '] succeeded. Data: ' + JSON.stringify(data))
      # ...
      return
  return false

.

そして、3つのAJAXリクエストが異なるデータで送信されるもの(たとえば、異なるリクエスト)

different_data_ajax

$('#cancel_search').click (e) ->
  document.cancel_cnt++ // this variable init to 0 at the beginning
  console.log("DEBUG: send ajax_cancel_search")
  $.ajax
    type: 'get'
    url: "/app/cancel"
    data: {attempt: document.cancel_cnt}
    dataType: "json"
    error: (error) ->
      console.log('DEBUG: ERROR: [app/cancel ' + document.cancel_cnt + '] returned an error!' + JSON.stringify(error)) # not really reliable with document.cancel_cnt, but this case doesn't matter
      # ...
      return
    success: (data) ->
      console.log('DEBUG: OK: [app/cancel ' + data.current_attempt + '] succeeded. Data: ' + JSON.stringify(data))
      # ...
      return
  return false

対応する railsSearchControllercancelメソッドは次のようになります。

  def cancel

    attempt = params[:attempt]
    puts ("INFO: [cancel] attempt #{attempt} requested")
    
    respond_to do |format|
      format.json {
        puts ("INFO: OK: [cancel] attempt #{attempt} succeeded")
        render :layout => false, :text => JSON.pretty_generate({current_attempt: attempt})
      }
    end

  end

TLDR:

問題は、Rails が"smart" and "awared"同じリクエストを集約して (キューに入れられたときに) 1 回だけ応答するようになっているのか、それともアプリのバグや問題なのかということです。レールが本当に"smart" and "awared"この場合である場合、どのように、どこで動作を設定できますか?

アップデート:

sidekiqこれを引き起こすことができますか?

4

2 に答える 2

0

一度に 1 つのリクエストを行っていることを示しているだけです。Rails に 3 つのリクエストを送信すると、3 回応答します。同様のリクエストを集約することはありません。

于 2013-10-19T17:32:49.747 に答える
0

AJAX 呼び出しを 1 回だけ行っています。もちろん、この呼び出しをループに入れると、3 つの要求が送信され、間違いなく 3 つの応答が返されます。

于 2013-10-28T14:20:17.530 に答える