我正在寫一個使用Sinatra
的終點,我將從客戶那裏接收原始pdf並需要處理pdf以供內部使用。現在PDF處理需要一段時間,我不一定希望客戶端等待處理完成並冒着timeout
(504
)的風險。而是想調用另一個處理pdf處理的方法,同時用適當的代碼迴應客戶端。使用Sinatra的最佳方式是什麼?Sinatra的「火與忘」電話
0
A
回答
1
所以有幾個環節進行,所以讓我崩潰的是將要發生的各個步驟:
- 客戶端上傳了一個PDF文件:這取決於PDF的規模和速度的連接,這可能需要一段時間。在等待上傳時,您的Web進程正在忙於接收數據,並且無法處理任何其他客戶端的請求。
- 然後,您需要處理上傳的文件,將其存儲在某處,可能會以某種方式對其進行處理。如果您將所有這些都作爲請求流程的一部分來完成,那麼您就有更多時間處理這一請求,無法爲其他客戶提供服務。
解決後者這些問題,操縱或處理上傳資產的典型方法是使用後臺作業隊列,如Sidekiq(http://sidekiq.org)。您將所需的數據存儲在某個地方,保留足夠的信息以知道要處理的內容(例如,存儲相關信息的模型的數據庫ID,文件名等),然後將所有必需的信息傳遞到後臺工作。然後你有單獨的工作進程來完成它的工作,但它們不是你web進程的一部分,所以它們不會阻止其他客戶端接收信息。
這仍然給我們帶來了處理大量上傳的問題,幸運的是,它也有解決方案。利用亞馬遜擁有的所有網絡容量,並讓客戶端將文件直接上傳到S3,完成時他們可以只發布文件名給您,然後您可以將其排入您的工作人員的上一步,然後讓它全部發生在後臺。這篇博文對如何使用回形針將它連接在一起做了很好的說明http://blog.littleblimp.com/post/53942611764/direct-uploads-to-s3-with-rails-paperclip-and
相關問題
- 1. 火,忘了NSOperation
- 2. 春季背景/火與遺忘處理
- 3. 火與遺忘(但不是完全)
- 4. 火和忘在C#
- 5. ELMAH不發生火災電子郵件和忘記的場景
- 6. MongoDB-upsert:火和忘記
- 7. 電話與OpenTok
- 8. 電話與twilio
- 9. ARC中的「火而忘記」課程
- 10. c#中的異步火災和遺忘#
- 11. Sinatra會話緩存
- 12. 跨Windows的Ruby Sinatra會話
- 13. 與Breeze.js打電話
- 14. 與電話號碼
- 15. QT開始外部過程(火與遺忘)
- 16. 電話身份與的DocuSign
- 17. 電話ManagementObjectSearchert.Get()與InvalidCastException的
- 18. JavaScript跨域火災和遺忘請求
- 19. 動作<T>火和遺忘?
- 20. 觀察員爲火&忘記任務
- 21. C#火和忘記考慮因素
- 22. 火和從WCF服務內忘記
- 23. 如何「開火併忘記」WinForms表單?
- 24. 處理髮生火災和忘記電子郵件中的錯誤
- 25. Sinatra與Rails
- 26. 與sinatra Authlogic?
- 27. RDiscount:generate_toc與Sinatra
- 28. Ruby和Sinatra會話問題
- 29. Sinatra會話自動銷燬
- 30. PHP會話未設置()與火狐
有幾個項目在單個請求之外實現作業隊列。雖然通常與Rails一起使用(並且網上的大多數示例都會顯示rails示例),但它們通常也可以從Sinatra很好地使用。示例是[delayed_job](https://github.com/collectiveidea/delayed_job),[resque](https://github.com/resque/resque)或[Sidekiq](http://sidekiq.org/)。這就是說,你的問題仍然非常廣泛,StackOverflow不適合廣泛的體系結構問題或尋找合適的工具來使用。你應該讓自己的分析適合你。 – 2015-03-30 21:13:32