WebSocket--實時通訊(1)

前言

在WebSocket之前,開發(fā)者完成實時通訊大抵都是求助一些‘hacks’來實現(xiàn)實時通訊随珠。最流行的一種方式是長輪詢?灭袁。?長輪詢主要是發(fā)出一個HTTP請求到服務器,然后保持連接打開以允許服務器在稍后的時間響應(由服務器確定)窗看∪灼纾可想而知,這是很浪費資源的显沈。

WebSocket

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

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

API

var ws = new WebSocket('wss://xxxxxxxxx')
// 建立連接
ws.onerror = function () { // do something }
// 錯誤調用
ws.onclose = function () { ... }
// 關閉時調用
ws.onopen = function () {
// 連接建立時調用
ws.send("Connection established. Hello server!");
// 向服務端發(fā)送消息
}

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

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

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

應用只需監(jiān)聽onmessage事件涤浇,用回調處理返回數(shù)據(jù)即可鳖藕。 WebSocket支持文本和二進制數(shù)據(jù)傳輸,瀏覽器如果接收到文本數(shù)據(jù)只锭,會將其轉換為DOMString 對象吊奢,如果是二進制數(shù)據(jù)或Blob 對象,可直接將其轉交給應用或將其轉化為ArrayBuffer纹烹,由應用對其進行進一步處理。
詳細處理:

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ù)的類型片挂,作為內存區(qū)域可以存放多種類型的數(shù)據(jù)。
對于將要傳輸?shù)亩M制數(shù)據(jù)贞盯,開發(fā)者可以決定以何種方式處理音念,可以更好的處理數(shù)據(jù)流,Blob 對象一般用來表示一個不可變文件對象或原始數(shù)據(jù)躏敢,如果你不需要修改它或者不需要把它切分成更小的塊闷愤,那這種格式是理想的;如果你還需要再處理接收到的二進制數(shù)據(jù)件余,那么選擇ArrayBuffer 應該更合適讥脐。

ws
wss

WebSocket 資源URI采用了自定義模式:ws 表示純文本通信( 如ws://example.com/socket),wss 表示使用加密信道通信(TCP+TLS)啼器。為什么不使用http而要自定義呢旬渠?
WebSocket 的主要目的,是在瀏覽器中的應用與服務器之間提供優(yōu)化的端壳、雙向通信機制告丢。可是损谦,WebSocket 的連接協(xié)議也可以用于瀏覽器之外的場景岖免,可以通過非HTTP協(xié)商機制交換數(shù)據(jù)。

  • ws協(xié)議:普通請求成翩,占用與http相同的80端口
  • wss協(xié)議:基于SSL的安全傳輸觅捆,占用與tls相同的443端口。

參考文獻:

Google
掘金

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末麻敌,一起剝皮案震驚了整個濱河市栅炒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖赢赊,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乙漓,死亡現(xiàn)場離奇詭異,居然都是意外死亡释移,警方通過查閱死者的電腦和手機叭披,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玩讳,“玉大人涩蜘,你說我怎么就攤上這事⊙浚” “怎么了同诫?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長樟澜。 經(jīng)常有香客問我误窖,道長,這世上最難降的妖魔是什么秩贰? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任霹俺,我火速辦了婚禮,結果婚禮上毒费,老公的妹妹穿的比我還像新娘丙唧。我一直安慰自己,他們只是感情好蝗罗,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布艇棕。 她就那樣靜靜地躺著,像睡著了一般串塑。 火紅的嫁衣襯著肌膚如雪沼琉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天桩匪,我揣著相機與錄音打瘪,去河邊找鬼。 笑死傻昙,一個胖子當著我的面吹牛闺骚,可吹牛的內容都是我干的。 我是一名探鬼主播妆档,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼僻爽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贾惦?” 一聲冷哼從身側響起胸梆,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤敦捧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后碰镜,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體兢卵,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年绪颖,在試婚紗的時候發(fā)現(xiàn)自己被綠了秽荤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡柠横,死狀恐怖窃款,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情牍氛,我是刑警寧澤雁乡,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站糜俗,受9級特大地震影響,放射性物質發(fā)生泄漏曲饱。R本人自食惡果不足惜悠抹,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扩淀。 院中可真熱鬧楔敌,春花似錦、人聲如沸驻谆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胜臊。三九已至勺卢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間象对,已是汗流浹背黑忱。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留勒魔,地道東北人甫煞。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像冠绢,于是被迫代替她去往敵國和親抚吠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內容

  • 一些參考內容: https://www.ntu.edu.sg/home/ehchua/programming/we...
    貘鳴閱讀 2,099評論 0 1
  • 問題:低延遲的客戶端-服務器和服務器-客戶端連接一直以來弟胀,網(wǎng)絡在很大程度上都是圍繞著所謂 HTTP 的請求/響應模...
    冰泡泡薄荷味閱讀 346評論 0 0
  • 其實今天是我有史以來最安靜的一天楷力,沒吃上午飯喊式,默默無聞,相對于昨天不是任何特殊的一天弥雹。但是垃帅!今天是我最好高...
    彌月_撒納閱讀 228評論 0 1
  • 這是最好的時代,也是最壞的時代剪勿。 用狄更斯《雙城記》里的話作為開頭贸诚。BBC重拍這部劇的時候,把這句話放在的電視劇最...
    Yvonne不是我閱讀 523評論 0 0
  • 你是 那樣的美 而我 卻是那樣的 無所適從
    風吹散mq閱讀 89評論 0 0