2009-11-05 46 views
4

我正在尋找一種在Rails應用(Phusion乘客服務器)上爲我的用戶實現實時饋送的好方法。根據用戶的不同,每種飼料可能會有所不同,我希望每20-60秒就有一件新產品。定期ajax請求看起來不是爲我做的最好方法。Rails實時時間

我聽說過Comet和我想到有這樣的事情: - 使用一個XMLHttpRequest長輪詢等待來自服務器 一個ping - 一旦服務器發送ping請求的最新資料與阿賈克斯 - 啓動另一個XMLHttpRequest

這有什麼問題嗎?有沒有更容易和更好的方法來做到這一點?

感謝, S.

+0

我不明白你的問題。您是否嘗試實施用戶活動供稿(如Facebook)? – knoopx 2009-11-05 16:49:59

+0

這更像是朋友饋贈。 – user203616 2009-11-05 16:55:43

回答

4

在網絡應用方面(通過擴展Rails應用程序),實時只是一種假象。長時間輪詢非常接近。不幸的是,它不太適合Rails。乘客更少。

長輪詢需要爲每個用戶提供一個持久的開放式連接,這種連接在沒有設計用於處理它的服務器(如Apache)上不能伸縮。不幸的是,真正有很多服務器設計用於長輪詢可伸縮性,這在Rails中可以很好地發揮作用。您可以嘗試使用Shooting-Star服務器,但對於您的標準請求,我真的不知道其性能與Passenger相比。

我個人對長輪詢的看法是它是一個需要解決問題的解決方案。

真的你應該問自己以下問題:

  • 是一個足夠高的優先級,他們不能等待40秒這些更新?
  • 如果沒有立即收到更新,會發生什麼情況?
  • 我的用戶是否會將注意力集中在我的應用程序上,等待15秒會對他們的體驗產生負面影響?
  • 在正常使用情況下,我的應用程序吸引了多少用戶的注意力?
  • 響應更新需要多長時間?
  • 難道真的需要實時嗎?

其中一些問題以其他方式提出其他問題,但這對於這些主觀問題是必要的。

我想你會看到我所得到的:實時更新非常好,但從未真正需要。如果你正在研究一些不能對實時更新做出反應的結果是世界末日的事情。你真的不應該開發它作爲一個Web應用程序。

如果您仍然關注實時更新,則可以查看Juggernaut。但這是一個基於Flash的解決方案。

+2

有很多場合長投票是有道理的。假設您正在等待異步後臺進程完成。如果用戶「等待」發生這種情況,則需要長輪詢或快速XHR請求。 – ghayes 2011-10-18 03:10:24

4

Friendfeed在Python中構建了Tornado server,它們已經開源。

在與nginx_http_push_module一起使用之前,我們查看了很多XMPP選項,這些選項設置起來相當複雜。長期的HTTP GET請求連接到這個,並且rails應用程序在nginx處推回請求。 Nginx也代理動態請求一羣雜種。我們運行了一些jQuery,它會打開連接,然後在接收到消息時或發生錯誤時將其重新打開到服務器。通過這種方式,我們可以實現Comet風格的近實時更新。

這個blog post on the nginx module with a ruby example應該可以幫助你入門(必須編譯nginx)。我們現在正在開發這個程序,並計劃在生產中使用它,除非它證明它本身不可靠,到目前爲止非常好。