本節書摘來自異步社群《node應用程式建構——使用mongodb和backbone》一書中的第2章,第2.4節,作者【美】mike wilson,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
node應用程式建構——使用mongodb和backbone
socket.io是你的朋友。它将消除制作實時網絡應用程式時的乏味工作,處理所有跨浏覽器相容的問題,在你的後端node伺服器和前端javascript用戶端之間,留出幹淨、簡單的javascript接口。這是一個令人激動的庫,因為作為一個程式員,它讓你專注于單一腳本語言的程式代碼,消除資料和最終使用者之間的網絡障礙。
要安裝socket.id,就用npm。

例2-7為網站添加了實時聊天功能,它建立了一個socket.io對象,并将其附加到http.server上,在express之前。在接到浏覽器的socket連接配接時,socket.io觸發應用内的一個回調函數,向連接配接使用者發出任意的一段歡迎消息。sendchat函數是為了友善而建立的;給定标題和内容,它使用socket.io的emit指令發送一段json資料給連接配接的socket。因為它在回調函數之内,是以對所有socket級别的事件是可見的,但對應用的其他部分是不可見的。
例2-7 為express伺服器添加實時聊天功能
socket.on('chat'…)這行代碼建立了一個事件回調,每當連接配接的使用者往socket發送消息時,就會執行。這裡沒有太多功能,伺服器隻是将使用者發來的消息直接顯示給他們。
為了給這個例子增加點活力,我已經将一個javascript的setinterval函數與其回調函數包含了進來,每隔5秒鐘,它會向連接配接的用戶端随機發送3個配角的一句口頭禅。
在例2-7中,express伺服器的執行個體化和之前的例子不同。它不是讓express對象直接監聽傳入的連接配接,而是先通過http.createserver(app)函數附加在http.server中,得到的伺服器對象再監聽進入的連接配接。在幕後,express的listen指令做同樣的事而不暴露http.server。采用這種方式,你要暴露http.server,以便讓socket.io連接配接到它。
例2-8的聊天布局在block scripts中加入了内容,在浏覽器中渲染時,它在html内容中加上了socket.io的功能。socket.io使某些檔案可供下載下傳,這就是為什麼你可以包含對/socket.io/socket.io.js的腳本引用。javascript檔案socket.io.js包含了浏覽器連接配接到socket伺服器所需的全部功能,它還包含回退機制,為過時的、不支援web socket的浏覽器提供類似socket的功能。
例2-8 聊天頁面的jade模闆(chat.jade)
一旦送出按鈕被激活,socket.io會發出聊天框的内容。在從網絡伺服器接收聊天事件後,socket.io會把傳入的消息内容替換到聊天顯示視窗(div#chat)。重要的是,要注意到socket事件和函數不論用在用戶端上還是網絡伺服器上都是完全相同的。這讓你為整個應用程式提供了一個幹淨的通信聯系,無需擔心傳輸或接收的資料需要轉換。