WebSocket 機制

WebSocket 是 HTML5 一種新的協(xié)議彼硫。它實現(xiàn)了瀏覽器與服務(wù)器全雙工通信凌箕,能更好的節(jié)省服務(wù)器資源和帶寬并達到實時通訊,它建立在 TCP 之上串绩,同 HTTP 一樣通過 TCP 來傳輸數(shù)據(jù)芜壁,但是它和 HTTP 最大不同是:

1.WebSocket 是一種雙向通信協(xié)議,在建立連接后顷牌,WebSocket 服務(wù)器和 Browser/Client Agent 都能主動的向?qū)Ψ桨l(fā)送或接收數(shù)據(jù),就像 Socket 一樣运挫;

2.WebSocket 需要類似 TCP 的客戶端和服務(wù)器端通過握手連接谁帕,連接成功后才能相互通信。

? ? ? ?相對于傳統(tǒng) HTTP 每次請求-應(yīng)答都需要客戶端與服務(wù)端建立連接的模式关划,WebSocket 是類似 Socket 的 TCP 長連接的通訊模式裤翩,一旦 WebSocket 連接建立后,后續(xù)數(shù)據(jù)都以幀序列的形式傳輸筐带。在客戶端斷開 WebSocket 連接或 Server 端斷掉連接前,不需要客戶端和服務(wù)端重新發(fā)起連接請求。在海量并發(fā)及客戶端與服務(wù)器交互負載流量大的情況下作儿,極大的節(jié)省了網(wǎng)絡(luò)帶寬資源的消耗妓雾,有明顯的性能優(yōu)勢君珠,且客戶端發(fā)送和接受消息是在同一個持久連接上發(fā)起策添,實時性優(yōu)勢明顯唯竹。

WebSocket握手請求(使用http請求完成)

清單 1.WebSocket 客戶端連接報文

GET /webfin/websocket/ HTTP/1.1

Host: localhost

Upgrade: websocket

Connection:?UpgradeSec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg==

Origin:http://localhost:8080

Sec-WebSocket-Version: 13

////”Upgrade:websocket”參數(shù)值表明這是 WebSocket 類型請求,WebSocket-Key”是 WebSocket 客戶端發(fā)送的一個 base64 編碼的密文棵磷,要求服務(wù)端必須返回一個對應(yīng)加/密的“Sec-WebSocket-Accept”應(yīng)答仪媒,否則客戶端會拋出“Error during WebSocket handshake”錯誤算吩,并關(guān)閉連接佃扼。

清單:2.WebSocket 服務(wù)端響應(yīng)報文

HTTP/1.1 101 Switching Protocols

Upgrade: websocket

Connection: Upgrade

Sec-WebSocket-Accept: K7DJLdLooIwIG/MOpvWFB3y3FE8=

////“Sec-WebSocket-Accept”的值是服務(wù)端采用與客戶端一致的密鑰計算出來后返回客戶端的,“HTTP/1.1 101 Switching Protocols”表示服務(wù)端接受 WebSocket 協(xié)議的客戶端連接兼耀。

webSocket 客戶端實例

// 創(chuàng)建一個Socket實例?

var socket = new WebSocket('ws://localhost:8080');//服務(wù)器地址

// 打開Socket ??

socket.onopen = function(event) {

// 發(fā)送一個初始化消息

socket.send('I am the client and I\'m listening!');

// 監(jiān)聽消息

socket.onmessage = function(event) {

console.log('Client received a message',event);//???event.data???接收數(shù)據(jù)

};

// 監(jiān)聽Socket的關(guān)閉

socket.onclose = function(event) {

console.log('Client notified socket has closed',event);

};

// 關(guān)閉Socket....

//socket.close()


webSocket 規(guī)范定義了ws和wss兩種url模式巢音,ws 用于非加密連接尽超,wss用于加密連接似谁。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市秃诵,隨后出現(xiàn)的幾起案子塞琼,更是在濱河造成了極大的恐慌,老刑警劉巖彪杉,帶你破解...
    沈念sama閱讀 222,946評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異派近,居然都是意外死亡渴丸,警方通過查閱死者的電腦和手機侯嘀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評論 3 399
  • 文/潘曉璐 我一進店門另凌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來戒幔,“玉大人吠谢,你說我怎么就攤上這事诗茎∧也罚” “怎么了错沃?”我有些...
    開封第一講書人閱讀 169,716評論 0 364
  • 文/不壞的土叔 我叫張陵栅组,是天一觀的道長。 經(jīng)常有香客問我枢析,道長玉掸,這世上最難降的妖魔是什么醒叁? 我笑而不...
    開封第一講書人閱讀 60,222評論 1 300
  • 正文 為了忘掉前任把沼,我火速辦了婚禮,結(jié)果婚禮上租谈,老公的妹妹穿的比我還像新娘割去。我一直安慰自己,他們只是感情好呻逆,可當我...
    茶點故事閱讀 69,223評論 6 398
  • 文/花漫 我一把揭開白布咖城。 她就那樣靜靜地躺著,像睡著了一般呼奢。 火紅的嫁衣襯著肌膚如雪宜雀。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,807評論 1 314
  • 那天控妻,我揣著相機與錄音州袒,去河邊找鬼揭绑。 笑死弓候,一個胖子當著我的面吹牛郎哭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播菇存,決...
    沈念sama閱讀 41,235評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼夸研,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了依鸥?” 一聲冷哼從身側(cè)響起亥至,我...
    開封第一講書人閱讀 40,189評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贱迟,沒想到半個月后姐扮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,712評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡衣吠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,775評論 3 343
  • 正文 我和宋清朗相戀三年茶敏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缚俏。...
    茶點故事閱讀 40,926評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡惊搏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出忧换,到底是詐尸還是另有隱情恬惯,我是刑警寧澤,帶...
    沈念sama閱讀 36,580評論 5 351
  • 正文 年R本政府宣布亚茬,位于F島的核電站酪耳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏刹缝。R本人自食惡果不足惜葡兑,卻給世界環(huán)境...
    茶點故事閱讀 42,259評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赞草。 院中可真熱鬧讹堤,春花似錦、人聲如沸厨疙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沾凄。三九已至梗醇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間撒蟀,已是汗流浹背叙谨。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留保屯,地道東北人手负。 一個月前我還...
    沈念sama閱讀 49,368評論 3 379
  • 正文 我出身青樓涤垫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親竟终。 傳聞我的和親對象是個殘疾皇子蝠猬,可洞房花燭夜當晚...
    茶點故事閱讀 45,930評論 2 361

推薦閱讀更多精彩內(nèi)容