[英]Execution of several processes of consumption of web services at the same time on Ruby on Rails
有誰知道如何同時運行多個進程? 我解釋一下上下文:
我目前正在連接 3 個網絡服務,結果將存儲在數據庫中,然后我將它們顯示在屏幕上。
它會是這樣的:
Task1 = 獲取 WebService 方法,存儲結果,顯示在屏幕上
Task2 = Method 獲取網絡服務,存儲結果,顯示在屏幕上
任務 3 = 方法 獲取 Web 服務、存儲結果、顯示在屏幕上
問題是每個進程需要 2 到 3 秒,乘以 3 個 Web 服務,大約需要 9 秒。
我想找到一種同時運行所有 3 個進程的方法,以最大程度地減少執行時間並更快地在屏幕上顯示結果。 此外,將來我將需要連接到更多的網絡服務。
我將 Web 服務與 RestClient gem 一起使用
對於像這樣不是 CPU 密集型的東西,您可以為此使用ruby 中的Thread
類。 使用這種方法,當響應返回時,“屏幕上的顯示”將立即發生。
此外,將這些任務推入 ActiveJob 隊列並在它們完成使用 ActionCable 時更新客戶端也是非常可行的。
您可以使用Typhoeus gem ,它是一個並行運行請求的 HTTP 客戶端:
require 'typhoeus'
hydra = Typhoeus::Hydra.new
hydra.queue(Typhoeus::Request.new("www.example.com/task_1", followlocation: true))
hydra.queue(Typhoeus::Request.new("www.example.com/task_2", followlocation: true))
hydra.queue(Typhoeus::Request.new("www.example.com/task_3", followlocation: true))
hydra.run
但最終在一個大的同步喇叭動作中這樣做可能不是一個非常可持續的解決方案。 hydra.run
仍在阻塞,只有在最慢的請求完成后才會完成。
您需要研究使用 AJAX 在多個請求(從客戶端到您的 Rails 應用程序)中執行此操作,以便您可以快速提供用戶反饋,然后更新頁面。
或者您可以使用 ActionCable,它可以讓您通過 websocks 通知客戶端來自服務器的更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.