NodeJS

Node.js 與 Socket.io – 即時聊天室實作(二)

在上一篇Node.js 與 Socket.io – 即時聊天室文章,我就假設你看過了也做完了,我們有了一個「超級無敵簡單」的聊天室,但那實在是太簡單了、太陽春了。

身為一個聊天室,它沒有前人的紀錄,也沒有每人專屬的名稱,喔對,還不會紀錄名稱!這真是太令人失望的聊天室,實在是太失望,完全就只是個拿來作為教學用的超級無敵簡單版本。作者到底做了什麼鬼東西啊!

喔等等,作者好像就是我。

好吧,為了盡棄前嫌,我決定來改良改良,增加一些新功能。

前情提要

請轉到Node.js 與 Socket.io – 即時聊天室實作收看。

名稱

第一個打算加入的是名稱,為什麼呢?因為比較簡單。

程式

views/insdex.html

這部分我們新增了 Cookies 的存取,用來實現我們的名稱記錄的功能。

這功能會在第一次送出成功時,將名稱存入 Cookies 之中,之後用同一個瀏覽器進入聊天室,你的名稱將會維持與先前所輸入的名字一樣的名稱。

聊天記錄

程式

records.js

index.js

views/index.html

在這邊我們新增了一個物件Records,它會將聊天記錄暫存於記憶體中,而當他收到新的訊息時,會通知伺服器主程式,然後伺服器再透過Websocket將訊息傳出去。此外,這個物件是全域型的物件,不過只會存在一個實體,是一種俗稱Singleton的一種程式設計方式。

而前端的調整主要是在第一次進入畫面,收到紀錄資料時的顯示方式,以及聊天筆數太多時要除掉舊的記錄這樣。

好了,啟動伺服器,連到http://localhost:3000,試試吧!

下一階:資料庫

這本篇教學中,我們已經成功地讓聊天訊息存在記憶體中,但重啟伺服器的話,這些存在記憶體中的暫時資料便會消失。為了解決每次重開伺服器聊天資料就被打掉重練的問題,我們可以為服務加入資料庫系統,有興趣的話可以繼續閱讀這篇文章:

完整程式

index.js

records.js

views/index.html

Have Fun

您的見解

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料