我正在使用外部服務來執行搜索我的應用程序。需要錯開消耗的外部API的軌道消耗
此搜索的結果需要從多個合作伙伴收集,需要10到90秒才能完成。在收集結果的同時,我反覆輪詢我的搜索會話以收集已經準備好的結果。
因爲當我有新的結果時,我將這些通過SSE轉移到客戶端。
我每5秒左右輪詢一次。
我應該如何運行這個過程,而不會讓我的一個線程在90秒內運行(運行puma + nginx)。我需要保持控制器的狀態,以將SSE推送給請求客戶端,並且我不確定處理輪詢之間延遲的最佳方式。
大加讚賞
我正在使用外部服務來執行搜索我的應用程序。需要錯開消耗的外部API的軌道消耗
此搜索的結果需要從多個合作伙伴收集,需要10到90秒才能完成。在收集結果的同時,我反覆輪詢我的搜索會話以收集已經準備好的結果。
因爲當我有新的結果時,我將這些通過SSE轉移到客戶端。
我每5秒左右輪詢一次。
我應該如何運行這個過程,而不會讓我的一個線程在90秒內運行(運行puma + nginx)。我需要保持控制器的狀態,以將SSE推送給請求客戶端,並且我不確定處理輪詢之間延遲的最佳方式。
大加讚賞
你必須放棄的SSE,如果你真的想釋放線程。爲了接收SSE,瀏覽器保持與web服務器的長時間連接,並且在每個客戶端連接將由單獨的線程處理的情況下。
不過,如果你只想做的,你可以使用下面的策略部分結果查詢:有一個在 - 在每個搜索請求例如sidekiq
另一種選擇可能是移動通訊問題的事件觸發服務器投票結果。 Evented Servers不會在每個連接上產生一個單獨的線程,無論是否長期存在。 Faye是一個與軌道完美集成的服務器,這是一個完美的服務器。過程將是:
其實美洲獅多線程設置意圖阻止你通過所有這些。 只要系統允許,我只會增加線程數和進程數,並查看其執行方式。添加更多內存或一些額外的服務器總是更便宜,並允許您專注於其他功能。
編輯1 反思什麼實際上是朝着後臺作業搜索的好處。Sidekiq也有自己的線程池,sidekiq線程與puma線程沒有區別。無論如何,搜索任務必須完成。它的線程將在大部分時間暫停,爲IO提供服務。所以,上述2個解決方案的唯一好處是適當的資源平衡。它允許您定義搜索作業將使用多少個線程,以及您的應用服務器有多少個線程。那麼,怎麼樣以下策略:
你甚至可以從頭並完全投票,只是堅持SSE
謝謝,這是偉大的。我想我應該像你說的那樣做,並且現在要擴大我的資源。然後計劃在接下來的幾個月內遷離上交所。再次感謝。 – RMcNairn
對此有更多的想法。檢查編輯 –