我使用ajax上傳照片,操作和上傳到s3需要很長時間。我聽說最好在後臺完成這些任務。我的應用程序需要等待照片上傳。但是,如果我選擇背景方式,那麼我將需要使用websockets或重複ajax來檢查結果(鏈接到s3)(我對此不高興)。 爲什麼在控制器(前景)中進行硬計算太糟糕了? 現在我使用Torquebox(Jruby),據我所知它具有完美的併發性。這是否意味着等待上傳到s3不會佔用資源,所有這些都可以正常工作? 請在我的情況下寫下背部/前部地面的優缺點。謝謝!Rails中的前景或背景圖像操作(Jruby,Torquebox)
0
A
回答
1
通常認爲不好的做法是阻止對第三方服務的網絡請求上的Web請求處理程序。如果該服務變得緩慢或不可用,則無論您使用的是何種Ruby,都會阻塞您的所有Web進程。這就是你所說的「前景」。
本質上講,這是您的當前設置(在前景)的流量:
- 用戶上載網站上的一個圖像和需要的控制器接收所述請求。
- 您的控制器向012請求同步請求s3。這是一個阻止請求。
- 你的控制器等待
- 你的控制器等待
- 你的控制器(繼續)等待
- 最後,(這是不保證的)你收到來自S3的迴應和你的代碼繼續並呈現你定的視圖/ JSON /文字/等。
顯然步驟3-5是爲您的服務器非常不好的消息,正如我前面所說,這名工人/線程/進程(根據您的Ruby/Rails服務器框架),直到響應將被「舉起」從s3收到(這可能永遠不會發生)。
這裏是相同的流動與在前端一些JavaScript幫助通知後臺作業:
- 用戶上載網站上的一個圖像和需要的控制器接收所述請求。
- 您的控制器創建一個新線程/進程向s3發出請求。這是非阻塞的方法。您在引用s3圖像src的記錄上設置了一個標記,例如完成:false,並且您的代碼很好地繼續到步驟3。您的新線程/進程將是等待s3響應的那個人,並且當s3響應時您將設置「已完成」標誌爲true。
- 您呈現您的視圖/ json/text/etc,並固有地釋放您的工人/線程/進程這個請求...好消息!
爲了娛樂前端東西:
- 你的客戶端接收的響應,觸發在前端JavaScript來啓動的setInterval狀重複的函數「坪'你的服務器每隔3秒鐘,你的後端控制器會檢查你之前設置的「完成」標誌是否爲真,如果是,則響應/呈現爲真。
- 您的客戶端JavaScript收到您的回覆,並繼續ping(直到您指定它應該放棄)或停止ping,因爲您的應用程序迴應爲真。
我希望這能讓您走上正確的道路。我認爲爲這個答案編寫代碼是次要的,因爲它好像你在尋找優點和缺點。對於實際的實施想法,我會看看以下內容:
相關問題
- 1. Android中的背景和前景圖像
- 2. 作爲當前設置的背景圖像查看背景?
- 3. 背景圖像作爲固定背景
- 4. 背景或前景線程?
- 5. 花式背景中的背景圖像?
- 6. 在背景圖像背景圖像
- 7. celltable - 如何使用圖像作爲celltable背景(或行背景)
- 8. 背景圖片上的背景圖像
- 9. 帶前景和背景的wpf按鈕作爲圖像
- 10. 如何顯示iPhone應用程序的背景圖像或前景圖像
- 11. 背景顏色藏漢作爲背景圖像中不工作
- 12. 操作欄背景
- 13. 背景圖像
- 14. 背景圖像
- 15. 圖像背景
- 16. 圖像背景
- 17. 背景圖像
- 18. CSS:背景顏色的背景圖像
- 19. 圖像作爲背景div
- 20. gif圖像作爲背景
- 21. 背景圖像不工作
- 22. 背景圖像不工作
- 23. SVG作爲背景圖像
- 24. 背景圖像不工作
- 25. 背景圖像不工作
- 26. 前景背景系統和實時操作系統的區別
- 27. 無法在背景顏色前帶背景圖像
- 28. 在背景顏色前懸停更改透明背景圖像
- 29. 設置背景或背景圖片
- 30. JavaFX中的背景圖像
1.我閱讀了關於線程池的內容,並且(據我所知)我在jruby(java)中的應用程序將使用固定線程池。這意味着當系統資源結束時,一次性的大量圖像上傳可以停止所有線程。我對麼? 2.你能回答嗎,可重複的要求是否足夠好?對於優秀的客戶端,我需要每秒發送至少一個請求。 (Websocket是否有這種用法?我不會在第一個版本中使用它們,而是爲了將來的想法。) 非常感謝! – makrusak 2015-02-23 11:56:54
@makrusak,如果您正在從應用服務器同步上傳到第三方,那麼很多圖片上傳可能會消耗您的最大請求池大小是正確的。正如我上面解釋的那樣,這會因請求排隊而放慢速度。 「可重複請求」是什麼意思?和'每秒一個請求'?如果您在提出請求時更喜歡來自客戶端和來自客戶端的實時響應,則Websockets非常出色。正如我所解釋的那樣,這不會繞過同步上傳問題。 Websockets只會取代'pinging'ajax請求。讓我知道你是否需要任何幫助。 – mkralla11 2015-02-26 17:57:06