webSocket初探

一、WebSocket介紹與原理

WebSocket protocol 是HTML5一種新的協(xié)議。它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信。一開始的握手需要借助HTTP請(qǐng)求完成。

原理

WebSocket同HTTP一樣也是應(yīng)用層的協(xié)議,但是它是一種雙向通信協(xié)議,是建立在TCP之上的。

-- 連接過(guò)程

  • 瀏覽器、服務(wù)器建立TCP連接,三次握手
  • WebSocket握手
  • 瀏覽器發(fā)送請(qǐng)求
  • 服務(wù)器收到客戶端的握手請(qǐng)求后,同樣采用HTTP協(xié)議回饋數(shù)據(jù)
  • 斷開TCP連接
    -- 如下圖所示


    websocket

二、WebSocket與HTTP的關(guān)系

相同點(diǎn)

  • 都是一樣基于TCP
  • 都是應(yīng)用層協(xié)議

不同點(diǎn)

  • WebSocket是雙向通信協(xié)議,模擬Socket協(xié)議,可以雙向發(fā)送或接受信息。HTTP是單向的
  • WebSocket是需要握手進(jìn)行建立連接的
    如下圖所示:


    websocket

三、WebSocket JS Client

1、WebSocket屬性

props.png

2、WebSocket事件

WX20200419-173139@2x.png

3、 創(chuàng)建WebSocket 實(shí)例

example

4、收發(fā)數(shù)據(jù)

  • 收發(fā)數(shù)據(jù)
connection.send("hello world!")
  • 接受數(shù)據(jù)
ws.onmessage = data => {
    console.log(data.data)
}
  • 錯(cuò)誤處理
    通過(guò)onerror函數(shù)進(jìn)行回調(diào)
ws.onerror = e => { 
  console.log(ws.readyState, 'websocket.readyState onerror')
}
  • 關(guān)閉事件
ws.onclose = data => { 
  console.log(ws.readyState,'關(guān)閉時(shí)狀態(tài)') 
}

四、WebSocket Node Server

  • 建立Node Http Server
var http = require('http')
var server = http.createServer((request,response) =>{} )
  • 監(jiān)聽端口
server.listen(3000, () => {
  console.log('server is listening on port 3000')
  })
  • 建立webSocket Sever
var websocket = require('websocket').server
var wsServer = new webSocket({httpServer: server})

總結(jié)

WebSocket在用于雙向傳輸、推送消息方面能夠做到靈活、簡(jiǎn)便、高效,但在普通的Request-Response過(guò)程中并沒(méi)有太大用武之地,比起普通的HTTP請(qǐng)求來(lái)反倒麻煩了許多,甚至更為低效。比如某些場(chǎng)景只需要簡(jiǎn)單的Request-Response,如果換做WebSocket還需要增加一個(gè)請(qǐng)求標(biāo)識(shí)RequestId,增加成本。每項(xiàng)技術(shù)都有自身的優(yōu)缺點(diǎn),在適合它的地方能發(fā)揮出最大長(zhǎng)處,而看到它的幾個(gè)優(yōu)點(diǎn)就不分場(chǎng)合地全方位推廣的話,可能會(huì)適得其反。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是WebSocket呢? WebSocket是HTML5新增的一種通信協(xié)議,目標(biāo)主流的瀏覽器都支持這個(gè)協(xié)議,比...
    JunChow520閱讀 7,535評(píng)論 1 5
  • 以前有遇到一些服務(wù)端客戶端交互問(wèn)題,有時(shí)希望交互是異步的,服務(wù)器的響應(yīng)是非即時(shí)的,但是http協(xié)議顯然不符合我的需...
    馮行洲閱讀 310評(píng)論 0 0
  • Socket并非是一個(gè)協(xié)議,而是為了方便使用TCP而抽象出來(lái)的一層,是位于應(yīng)用層和傳輸控制層之間的一組接口。換句話...
    JunChow520閱讀 3,523評(píng)論 0 4
  • 我的地址 :http://blog.csdn.net/jinglijun/article/details/9365...
    傻傻小蘿卜閱讀 1,424評(píng)論 0 1
  • WebSocket WebSocket protocol 是HTML5一種新的協(xié)議。它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通...
    hylide閱讀 372評(píng)論 0 0

友情鏈接更多精彩內(nèi)容