2011-10-09 50 views
1

我在rails上編寫使用jruby的應用程序。部分應用程序從網頁啓動長時間運行的過程。在某些情況下,長時間運行的過程可能會持續20分鐘,但在大多數情況下,在時間上會超出網頁響應時間。如果用戶關閉瀏覽器,我也希望該作業能夠繼續。長時間運行的進程會在數據庫運行時將記錄添加到數據庫中。與Ruby Web套接字服務器串聯排隊

我想給網頁上的數據庫插入視覺指示,我寧願使用網絡套接字而不是輪詢插入數據庫。

我想發送一個消息隊列處理程序,以確保如果用戶關閉瀏覽器完成作業的resque隊列。隊列處理程序將執行插入數據庫。

我正在考慮使用EM-WebSocket作爲我的websocket服務器。

我的問題是:

我如何才能resque過程和EM-WebSocket的過程之間的溝通?我想以某種方式將新插入的細節從resque過程傳遞到數據庫中,以便將與瀏覽器通信的EM-WebSocket實例?

有人解決了這樣的問題或任何想法我可以做到這一點?

+0

您是否想過將結果添加到Redis隊列並在您的Rails應用程序中觀察該隊列?假設您正在使用的Redis庫能夠從這樣的隊列中觀察/觀看/彈出元素。 – tbuehlmann

+0

這實際上看起來像一個很好的起點http://blog.0x82.com/2009/12/28/twitter-amqp-websocket-example-no-polling – dagda1

+0

是的,這就是我的意思,使用一個隊列。 – tbuehlmann

回答

1

我實際上正在研究一個讓這個非常簡單的gem。現在它很光亮,但它確實有效。 https://github.com/KellyMahan/RealTimeRails

它運行事件機器服務器來偵聽更新並使用em-websockets將這些更新發送到瀏覽器。

它意味着通過after_save調用來監視活動記錄更新,告訴事件機器服務器它有一個帶有id的模型的更新。然後它將模型和id匹配到特定的通道,以便將消息發送到Web套接字服務器上的連接。當瀏覽器收到更新通知時,會發出ajax調用來檢索最新結果。

仍在進行中的工作,但它可以幫助你。