2012-02-23 68 views
1

我正在Rails中開發一個應用程序,其中我正在向用戶提供通過HTML表編輯數據庫內容的選項。但是我想做出這種協作,以便當用戶更新任何內容時,其他用戶的視圖會自動更新。使用Pusher或類似的庫來自動更新數據庫中的視圖

我在調用AJAX函數來保存/更新數據。

有了這個,我可以使用輪詢,其中客戶端將不斷詢問服務器是否有任何更新。但這將是低效的。

在網上搜索我發現我可以使用網絡套接字,我可以使用庫,如Pusher,Slanger。

但我沒有找到任何關於如何使用這些庫來自動更新HTML表。

任何建議,將不勝感激。

回答

2

如果您對輪詢不感興趣,那麼發佈/訂閱服務器可能就是您要查找的內容。我會建議檢出Juggernaut。它允許客戶端瀏覽器與服務器建立長時間連接的不輪詢連接:相反,當您的服務器發送推送請求時,他們會將該推送中的JavaScript直接呈現到客戶端頁面上進行響應。

Juggernaut的作者有一個名爲Holla的示例項目,它幾乎完全符合您的要求 - 即訂閱服務器,並從連接讀取後更新客戶端所在的頁面。 Holla使用它來創建聊天服務,但您可以使用相同的代碼更新查看該服務的其他用戶的表格。

+0

thnx Veraticus。推送套接字優於輪詢的優點是什麼?我認爲推套接字也使用內部輪詢。我可能是錯的。你能澄清一下嗎?我看着劍聖,看起來非常有用,再次感謝.. – 2012-02-23 18:52:29

+1

劍聖內部不使用輪詢;它使用持久的websocket連接到服務器。 Web服務器比服務器資源輪詢更有效率。輪詢需要打開一個服務器連接並進行數據庫查詢,並在X秒內創建一個視圖,即使從那時起沒有任何變化......輪詢通知客戶端何時進行了更改,從而導致更高效溝通方法。 – Veraticus 2012-02-23 19:03:40

+0

我想在你最後一條評論的最後一行(而輪詢......)你想說'推套筒'。是的,我明白了你的觀點。圖書館如何知道哪些行/字段已被修改。或者它只是更新所有的數據。說在我的情況下,我只需要刷新已更新的單元格(如谷歌電子表格只刷新所需的單元格),所以我需要維護標誌嗎?或者圖書館對此有一些支持。 – 2012-02-23 19:51:32

1

我不使用任何這個,但是對於pusher.js來說,快速谷歌似乎很簡單。在瀏覽器端定義一個事件處理程序。

在服務器端,您可以觸發事件,並與事件一起發送一些數據(例如創建的記錄)。這可以是一個字符串或散列。哈希將被轉換爲JSON。

無論發送什麼樣的數據,你可以使用任何庫,如jQuery或類似的在表中創建新的行(或生成任何你需要的HTML)。 在Rails上下文中,使用render來生成html-string而不是JSON將允許您使用partials和模板。再次用jquery將它們插入到DOM中很容易。

Ruby on Rails甚至還集成了推送功能。請參閱pusher tutorial

我猜,像slanger這樣的其他庫會或多或少地以相同的方式工作。

+0

thnx,但推動者不是免費的。它爲免費用戶提供了一些有限的連接。你告訴你不要使用它們中的任何一個,然後如何從服務器向客戶端發送信息。說一行更新時。如何通知客戶/用戶更新了一些數據(不需要使用類似推送器的庫) – 2012-02-23 13:33:52

+1

@mashit:您的問題是如何使用這些庫來更新html。有相當多的技術可以允許這樣的事情,但是設置它可能會變得非常困難,特別是如果您僅限於免費軟件。我認爲[這篇文章](http://jordanhollinger.com/2011/05/15/writing-an-ajax-long-polling-server-in-ruby-part-1)顯示了一些方法來做到這一點。 – 2012-02-23 13:43:39

+0

thnx thorsten。你的回答很有用。 – 2012-02-23 13:50:08

相關問題