为什么在Rails中只获得多个排队请求的单个响应?

时间:2013-10-19 15:36:00

标签: ruby-on-rails ajax nginx webserver passenger

我有一个在WebRick下运行的Rails应用程序。

正如我现在所理解的,它作为单个实例运行,因此一次只能处理一个请求(应用程序方法调用)。因此,如果应用程序在新的请求到达之前无法处理每个请求,那么多个请求就会排队(离题:??或者它是web服务器[例如webrick,nginx]吗??)。是默认情况下与Phusion Passenger相同(我的应用程序一次只能处理一个请求,还是可配置?)

我有两个类似的用例:

使用相同数据发送三个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

其中三个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

相应的导轨SearchController的{​​{1}}方法如下所示:

cancel

TLDR:

所以问题是 - 是Rails所以 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 它聚合相同的请求并且只对所有人(当他们排队时)回复它们,或者它是我的应用程序中的错误/一些问题?如果在这种情况下rails实际上是"smart" and "awared" - 我如何以及在哪里配置行为?

更新

"smart" and "awared"会导致此吗?

2 个答案:

答案 0 :(得分:0)

您只是表明您一次只发出一个请求。如果您向Rails发送3个请求,则会响应3次。它不会以任何方式聚合类似的请求。

答案 1 :(得分:0)

您只进行一次AJAX通话。当然,如果你把这个电话放在一个循环中,它会发出三个请求,你肯定会收到三个回复。