socket.io basic example

Even Chang
3 min readSep 4, 2016

以前都是娛樂性質玩玩 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 支援的情況如何

可以看到大部分主流瀏覽器都已經支援 WebSocket 了,所以是一個非常適合作為 produciotn 使用的技術

Why choose socket.io?

其實大家有非常多的 socket lib 可以選擇,但考量到能夠快速上手,因此選擇了最常被人提及,而且社群相對活躍的 socket.io 作為這一次的 socket 學習。

當然除了這一個原因之外,socket.io 也偷偷幫我們包了一層降級策略,可以讓不支援 WebSocket 的 device 能夠使用 long-polling 達到一樣的效果。而開發者的 code 完全不需要任何改變。

當然在效能的考慮上,socket.io 並不是目前最優秀的,然而怎麼做 scale 應該不僅僅是考慮技術本身,還有 code 怎麼實踐以及機器效能都應該列入考慮。

basic example

basic example 的重點是在如何無痛快速上手 socket.io,所以針對其他部分會盡量從簡(例如使用的 package 或是太豐富的功能)

目標是能進入一個 lobby 就開始聊天

首先開啟我們的 project

我們將使用 express 作為我們的 framework

簡單做一些檔案結構,目前預計會有兩個頁面

完整的 github repo 可以參考

之後的兩篇分享預計會在繼續以 chatty 為基礎加強

有任何問題或錯誤歡迎留言跟我說

--

--

Even Chang

目前在英國倫敦的台灣人軟體工程師,曾經待過台灣、新加坡、荷蘭。希望透過分享,來產生更多思維碰撞💥 | LinkedIn: @hieven