代码之家  ›  专栏  ›  技术社区  ›  Kyle Heironimus

如何有效地用Rails实现阻塞调用,同时让客户机等待应答

  •  0
  • Kyle Heironimus  · 技术社区  · 14 年前

    我们有一个用Rails编写的web服务。API已发布,我们无法更改它。我们的应用程序与远程web服务通信,该服务有时会挂起或需要几秒钟才能回复。

     Client -> Our Web Service -> Remote Web Service
    

    目前,如果远程web服务挂起5秒钟,web服务上的一个rails进程也会随之挂起,这是我们需要避免的。

    我见过mod-x-sendfile、modporter和延迟作业,但据我所知,它们都假设客户没有等待答案。由于API已经建立,我们不能告诉客户“我正在尝试做你想做的事情,稍后再查看答案。”

    到目前为止,我们提出的最佳选择是添加第二个运行eventmachine的非rails web服务器来处理这些特定调用。有更好的办法吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   nathanvda    14 年前

    如果您将作业卸载到delayedJobs或eventmachine,您的Web服务器可以继续工作。然后,为了确保客户机执行繁忙的等待(被阻止),您可以使用ajax/javascript并检查一些url以查看任务是否已经完成。假设成功完成后,你设置或更改了某个内容,这样就可以显示结果。

    另一种方法是 juggernaut

        2
  •  0
  •   Chris Johnston    14 年前

    我不明白你想要什么。一开始,您似乎在询问如何使阻塞的远程呼叫不阻塞,但随后您声明希望在呼叫返回之前阻塞客户。我不确定你能不能两全其美。