2012-01-01 45 views
1

我很難搞清楚如何使用Rails來做到這一點,儘管這可能是因爲我不知道它的適當術語。如何在Rails中長時間運行的同步請求中生成響應?

我基本上要做到這一點:

def my_action 
    sleep 1 

    # output something in the request, but keep it open 
    print '{"progress":15}' 

    sleep 3 

    # output something else, keep it open 
    print '{"progress":65}' 

    sleep 1 

    # append some more, and close the request 
    print '{"sucess":true}' 
end 

但我無法弄清楚如何做到這一點。我基本上想複製一個緩慢的互聯網連接。

我需要這樣做,因爲我在刮網站,這需要時間,我在上面「睡覺」。

更新 我正在閱讀這個使用iOS,所以我不想要一個websocket服務器,我想。

+0

你可能術語是「沖洗」之後。您可能希望它在每次打印後刷新輸出()。有一些關於Rails 3.1自動刷新的信息http://yehudakatz.com/2010/09/07/automatic-flushing-the-rails-3-1-plan/雖然沒有直接關係。 – mahemoff 2012-01-01 14:29:19

回答

0

你可能想要做一些關於HTML5 WebSockets的閱讀(對於舊版瀏覽器有向後兼容的黑客),它可以讓你將數據從服務器推送到客戶端。

Rails有許多方法來實現WebSockets服務器。這個問題給出了一些選項Best Ruby on Rails WebSocket tool

0

如果這可以在服務器端工作,你將如何處理它在客戶端? HTTP請求通常只能有一個響應(在使用流時可能會被分塊,這對我的情況不起作用)。

我想你可能需要查看websockets或爲每個步驟提出單獨的請求。

+0

大多數現代瀏覽器中的XMLHttpRequest將在新數據到達時定期觸發onreadystatechange事件,因此可以在瀏覽器中使用。但是,無論如何,這是一個刮板,而不是瀏覽器,所以直接從網絡編程中獲取輸入緩衝。 – mahemoff 2012-01-01 14:32:40

+0

我正在使用iOS閱讀它,所以在每一步閱讀它都相當簡單。 – rdougan 2012-01-01 14:32:46

相關問題