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端口。