WebSocket介紹
websocket介紹:
websocket是html5開始提供的一種在單個TCP連線上進行全雙工通訊的協議,它使得客戶端和伺服器之間的資料交換變得更加簡單,允許服務端主動向客戶端推送資料。在WebSocket API中,瀏覽器和伺服器只需要完成一次握手,兩者之間就直接可以建立永續性的連線,並進行雙向傳輸。
在WebSocket API中,瀏覽器和伺服器只需要做一個握手動作,然後瀏覽器和伺服器之間就形成了一條快速通道。兩者之間就直接可以資料互相傳送。
Ajax輪詢:
輪詢是在特定的時間間隔,由瀏覽器對伺服器發出HTTP請求,然後由伺服器返回最新的資料給客戶端的瀏覽器。這種傳統的模式帶來明顯的缺點,即瀏覽器需要不斷的向伺服器發出請求,然而,HTTP請求可能包含較長的頭部,其中真正有效的資料可能只是一小部分,顯然這樣胡浪費很多的頻寬等資源。
websocket協議能更好的節省伺服器資源和頻寬,並且能夠更實時地進行通訊。
websocket於http的關係:
相同點:
- 都是一樣基於TCP的,都是可靠性傳輸協議
- 都是應用層協議
不同點:
- websocket是雙向通訊協議,模擬socket協議,可以雙向傳送或接收資訊。http是單向的
- websocket是需要握手進行建立連線的
聯絡:
websocket在建立握手時,資料是通過http傳輸的。但是在建立之後,真正傳輸的時候是不需要http協議的。
websocket與socket的關係:
socket其實並不是一個協議,而是為了方便使用TCP或者UDP而抽象出來的一層,是位於應用層和傳輸控制層之間的一組介面。在設計模式中,socket其實就是一個門面模式,它把複雜的tcp/ip協議族隱藏在socket介面後面,對使用者來說,一組簡單的介面就是全部,讓socket去組織資料,以符合指定的協議。
當兩臺主機通訊時,必須通過socket連線,socket則利用tcp/ip協議建立tcp連線。tcp連線則更依靠與底層的ip協議,ip協議的連線則依賴於鏈路層等更低層次。
websocket事件:
- open:---->處理程式:Socket.onopen 連線建立時觸發
- messag:---->處理程式:Socket.onmessage 客戶端接收服務端資料時觸發
- error:---->處理程式:Socket.onerror 通訊發生錯誤時觸發
- close:---->處理程式:Socket.onclose 連線關閉時觸發
websocket方法:
- socket.send():使用連線傳送資料
- socket.close():關閉連線