socket.io basic example
以前都是娛樂性質玩玩 socket,這一次剛好在工作上有需求必須使用。
所以除了基本的使用方式,也研究了一下如何 scale 跟如何做驗證的方式
預計分成三個部分來分享
- basic example (You are here)
- how to do authentication (to be continued)
- how to scale socket.io (to be continued)
What is WebSocket?
WebSocket 是在 html5 新定義的一種資料傳輸方式,其建立在 TCP 上的一種 full-duplex 通訊管道。
因為能夠讓 client 以及 server 兩邊持續維持著連線,並且雙向傳遞資料,因此大大提高了使用者的體驗。
常見的使用情境例如:
- 通知系統
- 即時聊天
- 多人共同編輯
其實說穿了,以上的例子都在解決一個問題——即時更新資料
以前想要做到類似效果,可能是利用 polling/long-polling 的方式來解決,也就是設定一個 timeout,不斷地透過 ajax 向 server 拿最新的資料。這樣的缺點也顯而易見,timeout 太短會浪費效能;timeout 太長會降低體驗。
我們再來看一下目前 WebSocket 支援的情況如何
Why choose socket.io?
其實大家有非常多的 socket lib 可以選擇,但考量到能夠快速上手,因此選擇了最常被人提及,而且社群相對活躍的 socket.io 作為這一次的 socket 學習。
當然除了這一個原因之外,socket.io 也偷偷幫我們包了一層降級策略,可以讓不支援 WebSocket 的 device 能夠使用 long-polling 達到一樣的效果。而開發者的 code 完全不需要任何改變。
當然在效能的考慮上,socket.io 並不是目前最優秀的,然而怎麼做 scale 應該不僅僅是考慮技術本身,還有 code 怎麼實踐以及機器效能都應該列入考慮。
- socket.io :有興趣的人可以從裡面了解更多
- The Fastest WebSocket Module for Node.js:對 benchmark 有興趣的人也可以 google 更多詳細資料
basic example
basic example 的重點是在如何無痛快速上手 socket.io,所以針對其他部分會盡量從簡(例如使用的 package 或是太豐富的功能)
目標是能進入一個 lobby 就開始聊天
首先開啟我們的 project
我們將使用 express 作為我們的 framework
簡單做一些檔案結構,目前預計會有兩個頁面
完整的 github repo 可以參考
之後的兩篇分享預計會在繼續以 chatty 為基礎加強
有任何問題或錯誤歡迎留言跟我說