WebSocket 入門 == ## 大綱 - 為什麼要用 WebSocket? - 什麼是 WebSocket? - 怎麼開始用 WebSocket? - 用 Socket.io 套件建立簡單 demo 專案 - 深入研究 WebSocket 協定與原理 ## Why WebSocket? - 因為 HTTP 協議只能由 client 端發送請求,server 端送回查詢結果。HTTP 做不到由 server 主動向 client 推送訊息。 - 由於 HTTP 單向請求的特性,假如 server 今天有連續的狀態變化,client 要得知就非常麻煩。 - 於是有人想到了可以使用 polling,中文叫做輪詢,顧名思義就是「每隔一段時間就去向 server 詢問狀態變化」,用以達到可以在 client 端顯示正確的資訊。 - 但 polling 的效率太低,也浪費資源,必須不停發送 request 詢問或持續 HTTP 連線,因此 WebSocket 就這樣誕生了! - 對戰遊戲例子? ## What is WebSocket? - 2008 年誕生,2011 年成為國際標準,目前所有瀏覽器都支持(?)。 - Wiki:「WebSocket是一種網路傳輸協定,可在單個TCP連接上進行全雙工通訊,位於OSI模型的應用層。」 - WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 - 最大特點是 server 能主動向 client 推送訊息,client 也可以向 server 發送訊息,是雙向對話,屬於服務器推送技術(?)的一種。 > [推播技術](https://zh.wikipedia.org/wiki/%E6%8E%A8%E9%80%81%E6%8A%80%E6%9C%AF#%E5%B8%B8%E8%A7%81%E4%BD%BF%E7%94%A8) ![](http://www.ruanyifeng.com/blogimg/asset/2017/bg2017051502.png) > [圖片來源](https://www.ruanyifeng.com/blog/2017/05/websocket.html) - 與 HTTP 有良好兼容性,預設 TCP port 也是 80 與 443,握手階段採用 HTTP 協議,因此握手時不容易屏蔽,能通過各種 HTTP proxy(?) - 數據格式較輕量,性能開銷小,通信高效(?) - 沒有同源限制,客戶端可以與任意服務器通訊(?) - 協議標示符是 `ws`,加密為 `wss` - WebSocket 與 HTTP 一樣都位於 OSI 模型的應用層,並且都依賴於傳輸層的 TCP 協定(?)。 ![](http://www.ruanyifeng.com/blogimg/asset/2017/bg2017051503.jpg) ## 參考文章 - https://zh.wikipedia.org/wiki/WebSocket - [WebSocket 教程](https://www.ruanyifeng.com/blog/2017/05/websocket.html) @ 阮一峰的网络日志 - https://developer.mozilla.org/en-US/docs/Web/API/WebSocket - https://www.runoob.com/html/html5-websocket.html - [JavaScript | WebSocket 讓前後端沒有距離](https://medium.com/enjoy-life-enjoy-coding/javascript-websocket-讓前後端沒有距離-34536c333e1b) @ 神Q超人 -> 有講 Node.js 建立連線的作法 --- 深入研究 WebSocket == ## 參考資料 - https://zh.wikipedia.org/wiki/WebSocket - 2011 年標準化:https://tools.ietf.org/html/rfc6455 - 補充規範:https://tools.ietf.org/html/rfc7936 - W3C WebSocket:https://www.w3.org/TR/websockets/ ## 歷史 - 2008年6月,Michael Carter進行了一系列討論,最終形成了稱為WebSocket的協定。 - 「WebSocket」這個名字是Ian Hickson和Michael Carter之後在 #whatwg IRC聊天室創造的,隨後由Ian Hickson撰寫並列入HTML5規範,並在Michael Carter的Cometdaily部落格上[宣布](https://web.archive.org/web/20080704232155/http://cometdaily.com/2008/07/04/html5-websocket/) - 2009年12月,Google Chrome 4是第一個提供標準支援的瀏覽器,預設情況下啟用了WebSocket。 - WebSocket協定的開發隨後於2010年2月從W3C和WHATWG小組轉移到IETF,並在Ian Hickson的指導下進行了兩次修訂。 - 被多個瀏覽器預設支援並啟用後,RFC於2011年12月在Ian Fette下完成。 ## WebSocket 前世:Comet,仍為一種 polling