使用WebSocket進行全雙工通信

一、WebSocket簡介

WebSocket 是 HTML5 開始提供的一種在單個 TCP 連接上進行全雙工通訊的協(xié)議。
WebSocket 使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡單,允許服務(wù)端主動向客戶端推送數(shù)據(jù)规伐。在 WebSocket API 中,瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就直接可以創(chuàng)建持久性的連接狭魂,并進行雙向數(shù)據(jù)傳輸。
在 WebSocket API 中党觅,瀏覽器和服務(wù)器只需要做一個握手的動作雌澄,然后,瀏覽器和服務(wù)器之間就形成了一條快速通道杯瞻。兩者之間就直接可以數(shù)據(jù)互相傳送镐牺。

二、WebSocket 通信原理

為了實現(xiàn) WebSocket 通信魁莉,在 HTTP 連接建立之后睬涧,需要完成一 次“握手”(Handshaking)的步驟。

握手·請求

為了實現(xiàn) WebSocket 通信旗唁,需要用到 HTTP 的 Upgrade 首部字 段畦浓,告知服務(wù)器通信協(xié)議發(fā)生改變,以達到握手的目的检疫。

請求.jpg

Sec-WebSocket-Key 字段內(nèi)記錄著握手過程中必不可少的鍵值讶请。 Sec-WebSocket-Protocol 字段內(nèi)記錄使用的子協(xié)議。 子協(xié)議按 WebSocket 協(xié)議標準在連接分開使用時屎媳,定義那些連接 的名稱夺溢。

177 握手·響應(yīng)

對于之前的請求,返回狀態(tài)碼 101 Switching Protocols 的響應(yīng)烛谊。

響應(yīng).jpg

Sec-WebSocket-Accept 的字段值是由握手請求中的 SecWebSocket-Key 的字段值生成的风响。 成功握手確立 WebSocket 連接之后,通信時不再使用 HTTP 的數(shù) 據(jù)幀晒来,而采用 WebSocket 獨立的數(shù)據(jù)幀钞诡。

成功握手確立 WebSocket 連接之后,通信時不再使用 HTTP 的數(shù) 據(jù)幀,而采用 WebSocket 獨立的數(shù)據(jù)幀荧降。

通信原理圖.jpg

JavaScript 可調(diào)用“The WebSocket API”接箫,以下為調(diào)用 WebSocket API,每 50ms 發(fā)送一次數(shù)據(jù)的實例朵诫。

var socket = new WebSocket('ws://game.example.com:12010/updates');
socket.onopen = function () { 
    setInterval(function() { 
        if (socket.bufferedAmount == 0) 
            socket.send(getUpdateData()); 
    }, 50); 
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辛友,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子剪返,更是在濱河造成了極大的恐慌废累,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脱盲,死亡現(xiàn)場離奇詭異邑滨,居然都是意外死亡,警方通過查閱死者的電腦和手機钱反,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門掖看,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人面哥,你說我怎么就攤上這事哎壳。” “怎么了尚卫?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵归榕,是天一觀的道長。 經(jīng)常有香客問我吱涉,道長刹泄,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任邑飒,我火速辦了婚禮循签,結(jié)果婚禮上级乐,老公的妹妹穿的比我還像新娘疙咸。我一直安慰自己,他們只是感情好风科,可當我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布撒轮。 她就那樣靜靜地躺著,像睡著了一般贼穆。 火紅的嫁衣襯著肌膚如雪题山。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天故痊,我揣著相機與錄音顶瞳,去河邊找鬼。 笑死,一個胖子當著我的面吹牛慨菱,可吹牛的內(nèi)容都是我干的焰络。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼符喝,長吁一口氣:“原來是場噩夢啊……” “哼闪彼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起协饲,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤畏腕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后茉稠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體描馅,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年而线,在試婚紗的時候發(fā)現(xiàn)自己被綠了流昏。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡吞获,死狀恐怖况凉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情各拷,我是刑警寧澤刁绒,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站烤黍,受9級特大地震影響知市,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜速蕊,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一嫂丙、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧规哲,春花似錦跟啤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至袄简,卻和暖如春腥放,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绿语。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工秃症, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留候址,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓种柑,卻偏偏與公主長得像宗雇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子莹规,可洞房花燭夜當晚...
    茶點故事閱讀 45,500評論 2 359