2011-01-20 29 views
6

我想創建一個像Facebook一樣的推送通知系統。每當Facebook想告訴你一些事情(比如某人在帖子中發表評論,標記了你等),你會在屏幕左下角看到一個小通知。它淡入淡出。與Rails和jQuery類似的推式通知

如何用jQuery和Rails構建這樣的系統?它甚至如何工作? JS總是問服務器,「有沒有新的通知?」或者服務器以某種方式推送到該服務。

現在,如果用戶向另一個用戶發送了一條消息(例如),我可以向用戶的隊列添加一條通知,說明「您有一條新消息」,但直到頁面重新加載纔會出現。

回答

6

Juggernaut看起來非常酷,我看到它演示很久以前,現在它被重寫在node.js之上。尼斯。你必須安裝redis和node.js並運行一個node.js服務器,其餘的都很簡單。

Pusherapp.com也看起來很酷,它是付費的,但至少你不必安裝和運行額外的服務(以及守護進程,擴展它們......)。

但是,如果負載不是太大,我寧願保持簡單,只是使用javascript進行輪詢。你可以很容易地編寫你自己的(這不是太難),但jquery已經存在一些非常好的插件。例如PeriodicalUpdater

4

目前,這樣的問題可以通過使用Comet來解決。

更多,http://en.wikipedia.org/wiki/Comet_(programming)

基本上瀏覽器使用HTTP是一個無狀態的協議,因爲它只能在要求工作則響應還挺方式,我們永遠無法真正得到真正的通知。當想要推送到瀏覽器時,我們必須以某種方式模仿TCP/Socket連接來推送它。彗星只是一個用來定義這種技術的術語。

有很多庫在這方面有所幫助.eg:軌道上的Juggernaut。

隨着新的瀏覽器有一些稱爲Websockets協議,我提到的庫也利用這一點。它是一個很大的話題,但我確信,你會發現一些基於Juggernaut和Rails的例子。

也有http://pusherapp.com,這是做同樣的事情,但收取的錢。

2

的另一種方式,很多網站實現的功能,比如這是波什,或通過同步HTTP雙向流:

http://en.wikipedia.org/wiki/BOSH

下面是一些JavaScript庫在那裏的一個:

http://code.stanziq.com/strophe/

這種類型的設置需要在後端安裝一個xmpp/bosh服務器,但基本上瀏覽器會保持一個打開的連接(與彗星非常相似),並且消息進入眉毛ser處理它們。

此技術可用於通知,聊天和任何您想要實時發生的事情。