還記得昨天提到的通訊協定 HTTP 嗎?
簡單來說就是等客戶端發起請求,伺服器端才會回應訊息給客戶端。
除了 HTTP,另一種通訊協定就是 WebSocket,這也是我要做的聊天室即時通訊的核心概念。
WebSocket 與 HTTP 最大的差異是前者為永遠的雙向連線,不必重新連線,也不必一直重新發送請求,如此一來是更為即時的。
而如何建立永遠的雙向連線呢,就好像交男女朋友,小明追求小美,告白之後,小美點頭答應了,之後兩人之間的交往關係就建立了,小明不需要每天、每個時刻、每秒都還要問小美要不要在一起。 (不過很多時候男女的關係並非永遠都不會斷,笑)
而在 WebSocket API 中,瀏覽器和伺服器只需要完成一次交握(Handshake)驗證,兩者之間就可以建立永續性的連接,並進行雙向資料傳輸。最主要的是克服了伺服器不需要被動等待客戶端傳送請求才能回應,而是無時無刻都可以主動傳輸資料!便於實現聊天室最重要的即時通訊功能!
當某個客戶端(小明)想要在群組發送一則訊息,按下送出的那一刻,即向伺服器發送請求:
伺服器收到後,將自動發送給其他客戶端(群組裡的所有人)
(而非透過客戶端先請求,伺服器再被動回應):
( PS.結果一直還沒進入重點,後面幾天再來整理一下 Rails 的 ActionCable )
參考資料:
What Are WebSockets
WebSockets Crash Course
WebSocket-基礎介紹與實體物件
wiki百科-TCP
學無止盡,每天都要進步一點點!