通訊(3)(websocket)

WebSocket

它實現(xiàn)了瀏覽器與服務(wù)器全雙工通信(full-duplex),可以傳輸基于消息的文本和二進制數(shù)據(jù)。WebSocket簡單的API背后隱藏了很多復(fù)雜性先蒋。他還提供了更多的服務(wù):

  • 連接協(xié)商和同源策略
  • 與既有 HTTP 基礎(chǔ)設(shè)施的互操作
  • 基于消息的通信和高效消息分幀
  • 子協(xié)議協(xié)商及可擴展能力

API

var ws = new WebSocket('[wss://xxxxxxxxx'](https://link.jianshu.com?t=wss://xxxxxxxxx'))
// 建立連接
ws.onerror = function () { // do something }
// 錯誤調(diào)用
ws.onclose = function () { ... }
// 關(guān)閉時調(diào)用
ws.onopen = function () {
// 連接建立時調(diào)用
ws.send("Connection established. Hello server!");
> // 向服務(wù)端發(fā)送消息
}

接受數(shù)據(jù)與發(fā)送數(shù)據(jù)

處理數(shù)據(jù)

ws.onmessage = function(msg) {
  // 接收服務(wù)端發(fā)送的消息
  if(msg.data instanceof Blob) {
  // 處理二進制信息
    processBlob(msg.data);
  } else {
    processText(msg.data);
    // 處理文本信息
  }
}

應(yīng)用只需監(jiān)聽onmessage事件,用回調(diào)處理返回數(shù)據(jù)即可。 WebSocket支持文本和二進制數(shù)據(jù)傳輸绣溜,瀏覽器如果接收到文本數(shù)據(jù),會將其轉(zhuǎn)換為DOMString 對象娄蔼,如果是二進制數(shù)據(jù)或Blob 對象涮毫,可直接將其轉(zhuǎn)交給應(yīng)用或?qū)⑵滢D(zhuǎn)化為ArrayBuffer瞬欧,由應(yīng)用對其進行進一步處理。
詳細處理:

wss.onmessage = function(msg) {
  if (msg.data instanceof ArrayBuffer) {
    processArrayBuffer(msg.data);
  } else {
    processText(msg.data);
  }
}

發(fā)送

ws.onopen = function () {
  socket.send("Hello server!");
  socket.send(JSON.stringify({'msg': 'payload'}));
  var buffer = new ArrayBuffer(128);
  socket.send(buffer);
  var intview = new Uint32Array(buffer);             
  socket.send(intview);
  var blob = new Blob([buffer]);
  socket.send(blob);
}

名稱解釋:
Blob
ArrBuffer

Blob 對象是包含有只讀原始數(shù)據(jù)的類文件對象罢防,可存儲二進制數(shù)據(jù)艘虎,它會被寫入磁盤;ArrayBuffer (緩沖數(shù)組)是一種用于呈現(xiàn)通用咒吐、固定長度的二進制數(shù)據(jù)的類型野建,作為內(nèi)存區(qū)域可以存放多種類型的數(shù)據(jù)。
對于將要傳輸?shù)亩M制數(shù)據(jù)恬叹,開發(fā)者可以決定以何種方式處理候生,可以更好的處理數(shù)據(jù)流,Blob 對象一般用來表示一個不可變文件對象或原始數(shù)據(jù)绽昼,如果你不需要修改它或者不需要把它切分成更小的塊唯鸭,那這種格式是理想的;如果你還需要再處理接收到的二進制數(shù)據(jù)硅确,那么選擇ArrayBuffer 應(yīng)該更合適目溉。

ws
wss

WebSocket 資源URI采用了自定義模式:ws 表示純文本通信( 如ws://example.com/socket),wss 表示使用加密信道通信(TCP+TLS)菱农。為什么不使用http而要自定義呢缭付?
WebSocket 的主要目的,是在瀏覽器中的應(yīng)用與服務(wù)器之間提供優(yōu)化的循未、雙向通信機制陷猫。可是的妖,WebSocket 的連接協(xié)議也可以用于瀏覽器之外的場景绣檬,可以通過非HTTP協(xié)商機制交換數(shù)據(jù)。

  • ws協(xié)議:普通請求嫂粟,占用與http相同的80端口
  • wss協(xié)議:基于SSL的安全傳輸娇未,占用與tls相同的443端口。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赋元,一起剝皮案震驚了整個濱河市忘蟹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搁凸,老刑警劉巖媚值,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異护糖,居然都是意外死亡褥芒,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來锰扶,“玉大人献酗,你說我怎么就攤上這事】琅#” “怎么了罕偎?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長京闰。 經(jīng)常有香客問我颜及,道長,這世上最難降的妖魔是什么蹂楣? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任俏站,我火速辦了婚禮,結(jié)果婚禮上痊土,老公的妹妹穿的比我還像新娘肄扎。我一直安慰自己,他們只是感情好赁酝,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布犯祠。 她就那樣靜靜地躺著,像睡著了一般赞哗。 火紅的嫁衣襯著肌膚如雪雷则。 梳的紋絲不亂的頭發(fā)上辆雾,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天肪笋,我揣著相機與錄音,去河邊找鬼度迂。 笑死藤乙,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的惭墓。 我是一名探鬼主播坛梁,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼腊凶!你這毒婦竟也來了划咐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤钧萍,失蹤者是張志新(化名)和其女友劉穎褐缠,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體风瘦,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡队魏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了万搔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胡桨。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡官帘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出昧谊,到底是詐尸還是另有隱情刽虹,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布呢诬,位于F島的核電站状婶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏馅巷。R本人自食惡果不足惜膛虫,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钓猬。 院中可真熱鬧稍刀,春花似錦、人聲如沸敞曹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澳迫。三九已至局齿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間橄登,已是汗流浹背抓歼。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拢锹,地道東北人谣妻。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像卒稳,于是被迫代替她去往敵國和親蹋半。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

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

  • 前言 在WebSocket之前充坑,開發(fā)者完成實時通訊大抵都是求助一些‘hacks’來實現(xiàn)實時通訊减江。最流行的一種方式是...
    O8閱讀 1,686評論 0 2
  • 轉(zhuǎn)載自WebSocket,侵刪 WebSocket 教程 作者: 阮一峰 WebSocket 是一種網(wǎng)絡(luò)通信協(xié)議,...
    三十五歲是碼農(nóng)閱讀 464評論 0 0
  • 一捻爷、內(nèi)容概覽 WebSocket的出現(xiàn)辈灼,使得瀏覽器具備了實時雙向通信的能力。本文由淺入深役衡,介紹了WebSocket...
    Calvin李閱讀 2,503評論 2 10
  • 二進制數(shù)組(ArrayBuffer對象茵休、TypedArray視圖和DataView視圖)是JavaScript操作...
    呼呼哥閱讀 21,286評論 2 12
  • 如果對你的未來,我只能提供一個忠告,那就是防曬油榕莺。 防曬油的長期好處已經(jīng)被科學(xué)家證實俐芯。不過,我的意見只限于自己曲折...
    喬拙閱讀 213評論 0 0