如何在 Rails 中执行异步请求?

Posted

技术标签:

【中文标题】如何在 Rails 中执行异步请求?【英文标题】:How to perform asynchronous requests in rails? 【发布时间】:2016-03-24 22:14:40 【问题描述】:

我想访问geocoding api 来获取给定地址的纬度和经度,但是有一个limitation,所以我创建了多个 gmail 帐户来使用多个 API 密钥访问地理编码 API,以便我可以访问 API没有任何 OVER_QUERY_LIMIT 问题

    如何使用 sidekiq 迭代这些 API 密钥以获取纬度和经度? 有没有更好的方法可以在不使用sidekiq的情况下实现上述目标

【问题讨论】:

【参考方案1】:

您可以使用变量对请求进行统计,并在您耗尽其限制时在 API 凭据之间切换。此外,您可能希望进行一些缓存以减少这些 API 调用。

【讨论】:

【参考方案2】:

这取决于您要达到的目标。

如果您有一个基于消费者的大型应用程序,其中包含大量地理编码请求,我建议您使用客户端地理编码。谷歌提供了一个javascript SDK。您仍然会有查询限制,但您将其转移给您的客户。所以每个客户都会有自己的限制。所以你不太可能超过这个限制。像Foursquare 这样的大网站也这样做。

如果您想确保坐标确实是地址的坐标,您必须在服务器端进行调用。这在基于消费者的应用程序中不是非常可取的。您将不得不pay Google 进行更多查询。这不是非常可扩展的。除非您构建的企业应用程序用户少得多。

但是,我不建议您尝试通过创建不同的帐户来智取 Google。 Google 知道这些技巧并将禁用您的帐户。如果发生这种情况,您的应用将无法再进行地理编码。然后——轰!! 500 Internal server error.

我希望这会有所帮助!

编码愉快:)

【讨论】:

以上是关于如何在 Rails 中执行异步请求?的主要内容,如果未能解决你的问题,请参考以下文章

Rails Turbo render_async:将 JWT 添加到异步请求

在异步 def 循环执行器中完成请求时如何添加请求参数?

如何从请求中返回结果,以及在 NodeJS 中执行异步任务但没有回调之后

如何在 fetch 中执行跨域请求以及异步等待? (CORS 错误)[重复]

如何使用反应钩子执行多个异步请求?

如何让 jQuery 执行同步而不是异步的 Ajax 请求?