Ruby on rails 如何在ruby API中创建异步请求、阻塞器方法

Ruby on rails 如何在ruby API中创建异步请求、阻塞器方法,ruby-on-rails,ruby,ruby-on-rails-4,ruby-on-rails-3.1,ruby-2.0,Ruby On Rails,Ruby,Ruby On Rails 4,Ruby On Rails 3.1,Ruby 2.0,我正在用ruby创建API 正在研究异步请求,阻止程序方法,如等待异步操作 有人能建议哪种方法是处理API异步操作的最佳方法吗?您可以使用gem,它是为并行运行HTTP请求而构建的 其思想是准备几个带有块的请求,用于处理每个请求的成功/错误,然后并行运行所有请求。“运行阶段”将阻塞,直到所有请求完成 以下是项目页面中的示例: hydra = Typhoeus::Hydra.hydra first_request = Typhoeus::Request.new("http://example.c

我正在用ruby创建API

正在研究异步请求,阻止程序方法,如等待异步操作

有人能建议哪种方法是处理API异步操作的最佳方法吗?您可以使用gem,它是为并行运行HTTP请求而构建的

其思想是准备几个带有块的请求,用于处理每个请求的成功/错误,然后并行运行所有请求。“运行阶段”将阻塞,直到所有请求完成

以下是项目页面中的示例:

hydra = Typhoeus::Hydra.hydra

first_request = Typhoeus::Request.new("http://example.com/posts/1")
first_request.on_complete do |response|
  third_url = response.body
  third_request = Typhoeus::Request.new(third_url)
  hydra.queue third_request
end
second_request = Typhoeus::Request.new("http://example.com/posts/2")

hydra.queue first_request
hydra.queue second_request
hydra.run # this is a blocking call that returns once all requests are complete
如果您不想等待异步操作结束(但您的问题表明并非如此),那么它就有点复杂了:您应该有一个API来运行请求并将请求ID返回给调用方,调用方随后可以查询API以获得与它接收到的请求ID相关联的结果

为了更灵活一点,您可以使用HTTP客户端库,它为多个后端提供统一的接口。从您喜欢的任何后端开始,如果您想测试/提高性能,您应该能够在以后将适配器更改为另一个后端

Typhous提供了法拉第后端,但您也可以使用它,它基于一个著名的宝石。如图所示,您可以利用Ruby的光纤与法拉第和EM同步

下面是一个使用Faraday和Typhous运行并行请求的示例:


使用上一个示例,应该很容易适应使用EM HTTP请求适配器。

谢谢@Olivier…我会试试这个…即使我在google上有一篇文章。。。你能推荐我哪一个好。我想Typhous是个不错的选择,可能比自己处理纤维要好。。。我将用其他选项更新我的答案:)不客气!如果我的答案解决了你的问题,别忘了接受它^^