异步http请求,以便响应时间不会增加

时间:2016-03-10 08:43:03

标签: ruby-on-rails ruby

我正在编写一个rails代码,我正在尝试与服务器通信并传递请求。我必须从服务器获取日志(通过向服务器发送http请求)但我不想增加请求处理所花费的时间,是否有任何方式我可以获取信息,这样它不会增加我的请求处理时间?

# connect to the server
# make a request to the server
# after the request is completed, get info
# server shuts down
# output the results

如何使信息获取异步,以免增加输出结果所需的时间?

我怎么能

1 个答案:

答案 0 :(得分:0)

如果您希望控制器方法发出一些外部Web请求,然后使用相同的控制器方法返回响应,则除了等待之外别无选择。

如果您对这些要求不那么严格,可以选择以下几种方法:

  1. 不要在控制器中调用外部请求。立即渲染HTML页面并使用AJAX在Javascript中发出请求。请注意,如果您尝试命中的外部请求具有CORS限制,则可能不会选择此选项 - 在这种情况下,需要在服务器上(在Ruby中)完成外部请求。请注意,您可以通过生成外部请求的Rails控制器操作并从AJAX调用此Rails端点来绕过CORS限制。

  2. 例如,在Ruby中使用真正的异步/后台作业方法 - Resque。 但是这种方法比选项1更难。你仍然需要你的Rails控制器来渲染没有异步加载数据的HTML。然后,作为异步运行的代码的一部分,您可以触发一个将websocket更新推送到客户端的Rails端点。这是最“实时”的选择,但就像我说的那样,更难。

  3. 可能最简单的解决方案是缓存外部请求的响应,以便不需要重复调​​用它。例如,您可以将请求作为Rails初始化代码的一部分进行调用,然后将响应保存到数据库中。如果每次敲击Rails控制器时需要调用不同的外部请求,则此方法将不起作用。为了更进一步,您甚至可以从外部资源预加载应用程序所需的所有数据,然后使用ORM为每个请求加载不同的数据。由于HTTP延迟远大于SQL延迟,因此这会使事情变得更快。