iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 20
1
自我挑戰組

關於 Ruby on Rails 的那些事系列 第 20

Day 20 - 關於「即時更新」- WebSocket

還記得昨天提到的通訊協定 HTTP 嗎?
簡單來說就是等客戶端發起請求,伺服器端才會回應訊息給客戶端。

WebSocket

除了 HTTP,另一種通訊協定就是 WebSocket,這也是我要做的聊天室即時通訊的核心概念。
WebSocket 與 HTTP 最大的差異是前者為永遠的雙向連線,不必重新連線,也不必一直重新發送請求,如此一來是更為即時的。

而如何建立永遠的雙向連線呢,就好像交男女朋友,小明追求小美,告白之後,小美點頭答應了,之後兩人之間的交往關係就建立了,小明不需要每天、每個時刻、每秒都還要問小美要不要在一起。 (不過很多時候男女的關係並非永遠都不會斷,笑)

而在 WebSocket API 中,瀏覽器和伺服器只需要完成一次交握(Handshake)驗證,兩者之間就可以建立永續性的連接,並進行雙向資料傳輸。最主要的是克服了伺服器不需要被動等待客戶端傳送請求才能回應,而是無時無刻都可以主動傳輸資料!便於實現聊天室最重要的即時通訊功能!

重點中的重點:

  1. 客戶端與伺服器間的通訊
  2. 客戶端與伺服器雙向溝通
  3. 即時數據更新

聊天室的概念圖

當某個客戶端(小明)想要在群組發送一則訊息,按下送出的那一刻,即向伺服器發送請求:

伺服器收到後,將自動發送給其他客戶端(群組裡的所有人)
(而非透過客戶端先請求,伺服器再被動回應):

除了聊天室之外的應用之處:

  • 股票看盤網站,你不會希望錯過最佳買入點或賣出點
  • 共同協作筆記,ex:hackmd.io
  • 多人連線遊戲,這應該不用多說了XD

( PS.結果一直還沒進入重點,後面幾天再來整理一下 Rails 的 ActionCable )

參考資料:
What Are WebSockets
WebSockets Crash Course
WebSocket-基礎介紹與實體物件
wiki百科-TCP

學無止盡,每天都要進步一點點!


上一篇
Day 19 - 關於「即時更新」- HTTP
下一篇
Day 21 - RoR 如何實現即時通訊「ActionCable」- 上集
系列文
關於 Ruby on Rails 的那些事30

尚未有邦友留言

立即登入留言