2011-12-12 61 views
0

我正在構建一個Ruby Web服務,它接受POST或PUT請求,告訴它做一些工作。這項工作涉及移動一些大文件 - 有時通過網絡 - 所以這些請求可能需要一段時間。我正在構建一個單獨的服務 - 以Python或節點或其他方式 - 處理調度&監視對Ruby服務的請求。是否可以從簡單的Ruby/Rack應用程序發送流式響應?

我想發送關於Ruby應用程序行爲的定期進度報告給調度器。也許每次離散操作成功完成時,例如移動一個文件,都會有一行。

這是可能的標準機架應用程序?僅供參考我使用的是露營框架這不是從西納特拉不同等。通常你從剛纔的方法返回發送響應:

def get 
    @status = 404 
    @headers['Content-Type'] = 'application/json' 
    return Yajl::Encoder.new.encode({error: 'forbidden', reason: 'I don't like you'}) 
end 

我知道我的過程是由機架/ Web服務器接口管理,所以我不知道是否可以在Rack中發送流式響應,而不必深入框架的工作方式並與Rack交談。有人能給我一些指點嗎?

是的,我知道,Ruby是不是流的HTTP服務器首選的解決方案;)

回答

1

聽起來像是你需要一個chunked transfer。在Rack中也有一個Rack::Chunked中間件。

+0

謝謝。不過,我想我不得不停止嘗試將這種東西裝入基於Rack的Web框架中。 – Cera

1

Goliath框架處理流式響應。看看the content_stream的例子。沒有理由爲什麼Ruby不是流式響應的首選解決方案,我們在PostRank中使用Goliath來處理一些相當重量級的流媒體服務。

相關問題