史上最全的Websocket入門教程-創(chuàng)新互聯(lián)

websocket是什么?
答: 它是一種網(wǎng)絡(luò)通信協(xié)議,是 HTML5 開始提供的一種在單個 TCP 連接上進(jìn)行全雙工通訊的協(xié)議。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:國際域名空間、虛擬主機(jī)、營銷軟件、網(wǎng)站建設(shè)、柳州網(wǎng)站維護(hù)、網(wǎng)站推廣。

為什么需要websocket? 疑問? 我們已經(jīng)有了 HTTP 協(xié)議,為什么還需要另一個協(xié)議?它能帶來什么好處?
答: 因?yàn)?HTTP 協(xié)議有一個缺陷:通信只能由客戶端發(fā)起
     我們都知道輪詢的效率低,非常浪費(fèi)資源(因?yàn)楸仨毑煌_B接,或者 HTTP 連接始終打開), 因此websocket應(yīng)運(yùn)而生。

WebSocket簡介
WebSocket 使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡單,允許服務(wù)端主動向客戶端推送數(shù)據(jù)。在 WebSocket API 中,瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就直接可以創(chuàng)建持久性的連接,并進(jìn)行雙向數(shù)據(jù)傳輸。WebSocket協(xié)議基于TCP協(xié)議實(shí)現(xiàn),包含初始的握手過程,以及后續(xù)的多次數(shù)據(jù)幀雙向傳輸過程。其目的是在WebSocket應(yīng)用和WebSocket服務(wù)器進(jìn)行頻繁雙向通信時,可以使服務(wù)器避免打開多個HTTP連接進(jìn)行工作來節(jié)約資源,提高了工作效率和資源利用率。
史上最全的Websocket入門教程

 
WebSocket目前支持兩種統(tǒng)一資源標(biāo)志符ws和wss,類似于HTTP和HTTPS。

實(shí)現(xiàn)原理
瀏覽器發(fā)出webSocket的連線請求,服務(wù)器發(fā)出響應(yīng),這個過程稱為握手,握手的過程只需要一次,就可以實(shí)現(xiàn)持久連接。

握手與連接
瀏覽器發(fā)出連線請求,通過get可以表明此次連接的建立是以HTTP協(xié)議為基礎(chǔ)的,返回101狀態(tài)碼。

如果不是101狀態(tài)碼,表示握手升級的過程失敗了

101是Switching Protocols,表示服務(wù)器已經(jīng)理解了客戶端的請求,并將通過Upgrade 消息頭通知客戶端采用不同的協(xié)議來完成這個請求。在發(fā)送這個響應(yīng)后的空檔,將http升級到webSocket。

其中Upgrade和Connection字段告訴服務(wù)端,發(fā)起的是webSocket協(xié)議

Sec-WebSocket-Key是瀏覽器經(jīng)過Base64加密后的密鑰,用來和response里面的Sec-WebSocket-Accept進(jìn)行比對驗(yàn)證

Sec-WebSocket-Version是當(dāng)前的協(xié)議版本

Sec-WebSocket-Extensions是對WebSocket的協(xié)議擴(kuò)展

服務(wù)器接到瀏覽器的連線請求返回結(jié)果如下:

Upgrade和Connection來告訴瀏覽器,服務(wù)已經(jīng)是基于webSocket協(xié)議的了,讓瀏覽器也遵循這個協(xié)議

Sec-WebSocket-Accept是服務(wù)端確認(rèn)后并加密后的Sec-WebSocket-Accept

至此,webSocket連接成功,接下來就是webSocket的協(xié)議了。

客戶端的簡單示例:

var ws = new WebSocket("wss://echo.websocket.org");
ws.onopen = function(evt) { 
  console.log("Connection open ..."); 
  ws.send("Hello WebSockets!");
};
ws.onmessage = function(evt) {
  console.log( "Received Message: " + evt.data);
  ws.close();
};
ws.onclose = function(evt) {
  console.log("Connection closed.");
}; 
ws.onerror = function(evt) {
  console.log("error!!!"); 
};

網(wǎng)站標(biāo)題:史上最全的Websocket入門教程-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://muchs.cn/article16/csgegg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、網(wǎng)站建設(shè)網(wǎng)頁設(shè)計(jì)公司、服務(wù)器托管搜索引擎優(yōu)化、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)