gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 08:22:34 24 4
gpt4 key购买 nike

我正在用 ruby​​ 创建 API。

正在研究异步请求、等待异步操作等阻塞方法..

谁能建议哪种方式是处理 API 异步操作的最佳方式

最佳答案

您可以使用 Typhoeus为并行运行 HTTP 请求而构建的 gem。

这个想法是准备几个请求,其中包含用于处理每个请求的成功/错误的 block ,然后并行运行所有这些请求。 “运行阶段”将阻塞,直到所有请求完成。

这是项目页面中的示例:

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 关联的结果。

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

Typhoeus 提供法拉第后端,但您也可以使用 EM-HTTP-Request这是基于 EventMachine ,著名的 gem 。您可以将 Ruby 的 Fibers 与 Faraday 和 EM-Synchrony 结合使用,如图所示 in this example .

这是一个使用 Faraday 和 Typhoeus 运行并行请求的示例:https://github.com/lostisland/faraday/wiki/Parallel-requests

使用前面的示例,应该很容易适应使用 EM-HTTP-request 适配器。

关于ruby-on-rails - 如何在 ruby​​ API 中创建异步请求、阻塞方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27938518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com