2016-06-24 45 views
0

我想做類似如下的事情:當用戶點擊一個按鈕時,我發送一個ajax請求到服務器,服務器啓動 做後臺IO操作,而用戶立即收到迴應說「已開始」。這是用戶的需求。在Ruby中或帶定時器的Rails中的短時間後臺作業

在後臺操作正在進行的服務器上。操作應該在10分鐘內執行10次。這是類似於 定期輪詢一些東西,比如數據庫的狀態。在狀態改變不到10分鐘內,操作應該立即停止,因此可以是1分鐘或3分鐘。否則操作繼續。最多10分鐘內10次。

肯定不想使用任何第三方庫,因爲我知道我可以通過純ruby或Rails的方式來做到這一點。這並不重要,它更困難。

我該怎麼做?

我知道,我應該創建一個線程,但我應該怎麼究竟做部分「不斷輪詢的東西在10分鐘 最多一次一分鐘狀態,最多10次,如果一些條件是那麼你就完成了,馬上完成。「

請注意,這是我想要的簡化版本,但這個想法就是我所描述的。

+0

你可以使用'ActiveJob'。看看http://stackoverflow.com/questions/25798013/how-do-i-schedule-recurring-jobs-in-active-job-rails-4-2 –

回答

1

下面的代碼好像你所追求的:根據您的服務器上

sleep_time = 60 # seconds 
attempt = 0 
max_attempts = 10 
while (attempt < max_attempts) 
    condition_met = check_condition() 
    break if(condition_met) 
    attempt += 1 
    sleep(sleep_time) 
end 

,產生線程可能是重要的。例如,如果服務器僅在一個線程上運行,並且運行上述代碼,則服務器將在睡眠期間停止。也就是說,服務器將不會響應任何後續請求。如果你產生一個線程,只有線程會休眠,但主服務器進程將繼續。除非您提供有關服務器的詳細信息,否則我不能多說。它是WEBrick嗎?瘦?

只要您對用戶點擊按鈕觸發此操作的評論,就可以像對您實施的某個Ruby on Rails控制器的HTTP POST請求一樣簡單。如果請求成功,它可以告訴用戶操作正在進行。

相關問題