【问题标题】:Ruby on Rails request in backgroundRuby on Rails 请求在后台
【发布时间】:2015-11-30 15:41:20
【问题描述】:

在我的 Ruby on Rails 应用程序中,用户可以授予我代表他们发推文的权限,这样他们就可以从应用程序发送预填充的推文。这是流程:

  • 向我的服务器请求
  • 向 twitter 服务器发出服务器请求
  • 根据 twitter 的响应,我的用户得到了响应。

对 twitter 的请求阻止了我的应用程序。我使用带有 resque 的 ActiveJob 与 3rd 方应用程序和电子邮件进行其他通信,但在这种情况下,我想根据 twitter 服务器响应给用户响应。

有可能以某种方式做到吗?:

  • 向我的服务器请求
  • 向 twitter 服务器发出服务器请求
  • 等待,以便我的服务器可以处理其他请求
  • 收到有关 twitter 服务器响应的通知并将响应发送给我的用户

发送推文的用户必须等待不是问题。我只是不希望其他用户等待。

【问题讨论】:

  • 你在使用独角兽吗? unicorn.bogomips.org,乘客? github.com/phusion/passenger 还是彪马? github.com/puma/puma
  • 您是否尝试过在第一个窗口/选项卡处于“等待”状态时在第二个窗口/选项卡中运行另一个请求?您可能会发现一切都在按照您的意愿进行。
  • @ilanberci 我在 Nginx 中使用乘客。
  • @Jon 我希望如此。我将 twitter url 更改为不存在的(因此被阻止直到超时)。在另一个浏览器中,应用程序直到超时才响应。

标签: ruby-on-rails parallel-processing resque rails-activejob


【解决方案1】:

一种解决方案是使用 ActiveJob 和救援从 twitter 请求,当 twitter 响应时,您可以使用实时引擎响应用户。

另一种解决方案是使用支持多线程的服务器(puma、rainbows!..)。

我个人认为我会使用实时服务来解决这个问题。虽然它增加了一些开销,但从长远来看,它将有助于维持更多的并发用户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    相关资源
    最近更新 更多