0

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

正如我现在所了解的,它作为单个实例运行,因此一次只能处理一个请求(应用程序方法调用)。因此,如果应用程序无法在新请求到达之前处理每个请求(离题:??或者它是网络服务器 [例如 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 请求(比如说 - 不同的请求)

不同的_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相应的railscancel方法如下所示:

  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"是为了聚合相同的请求并只对它们进行一次回复(当它们排队时),还是我的应用程序中的一个错误/一些问题?如果在这种情况下确实存在导轨"smart" and "awared"- 我如何以及在哪里配置行为?

更新:

sidekiq导致这个吗?

4

2 回答 2

0

您只进行了一次 AJAX 调用。当然,如果你把这个调用放在一个循环中,它会发送三个请求,你肯定会得到三个响应。

于 2013-10-28T14:20:17.530 回答
0

You're only showing that you're making one request at a time. If you send 3 requests to Rails is will respond 3 times. It does not aggregate similar requests in any way.

于 2013-10-19T17:32:49.747 回答