websocket 是乙個建立在 tcp 之上進行全雙工通訊的應用層協議
我們知道,http 協議採用的是請求/響應模式,服務端是不能主動向客戶端推送資料的
若要實現推送功能,一般都是採用 ajax 輪詢,但這樣頻繁的請求會給服務端帶來極大的壓力
websocket 協議就是為了解決這種類似的場景而出現的,它允許服務端可以主動向客戶端推送資料
瀏覽器和伺服器通過一次握手,就能在兩者之間建立持續性的連線,進行雙向資料傳輸,直至任意一方將其關閉
目前,基於 sha 加密方式的握手協議是使用最為廣泛的,具體的過程如下:
乙個典型的客戶端請求如下:
sec-websocket-key: 隨機字串
sec-websocket-version: 13乙個典型的服務端響應如下:
sec-websocket-accept: 根據 sec-websocket-key 計算得到
sec-websocket-location: ws://localhost:5000在理解了原理之後,我們下面再來看一下具體要怎麼使用 websocket
在客戶端瀏覽器中,可以通過建構函式websocket()
建立乙個物件
其中,引數url
用於指定連線位址,引數protocol
用於指定可接受的子協議
websocket
(url,
[protocol]
)
建構函式返回乙個 websocket 物件,該物件常用的屬性和方法如下:
var ws =
newwebsocket
('ws://localhost:5000'
)ws.
onopen
=function
(event)
ws.onmessage
=function
(event)
ws.onclose
=function
(event)
; ws.
onerror
=function
(event)
而對於伺服器而言,websocket 只是一種協議而已,不同的語言和不同的框架會有不同的實現
下面我們以 node.js 為例,寫乙個簡單的 demo
var express =
require
('express'
)var expressws =
require
('express-ws'
)express()
expresswsws(
'/',
function
(ws, req))}
)listen
(5000
,'127.0.0.1'
,function()
)
學習筆記(九)
字元處理只針對c n d t string型別,不做型別轉換,都按照c型別處理,也可以處理這些型別構成的結構體,有專門的字串比較 定位操作 concatenate first name last name into first name separated by separate.write fir...
Html筆記 九 頭標籤
頭標籤 頭標籤都放在 head 頭部分之間。包括 title base meta link 指定瀏覽器的標題欄顯示的內容。href 屬性 指定網頁中所有的超連結的目錄。可以是本地目錄,也可以是網路目錄,注意值的結尾處一定要用 表示目錄。只作用於相對路徑的超連結檔案。name 屬性 網頁的描述資訊。當...
HTML學習筆記
2004 9 9 星期四 陰 hello world 整個頁面分成三部分 1 一行包括html版本資訊的內容 2 報頭申明區域 3 頁面主要部分,包括頁面的實際內容。2.基本的html標記 答 1 headings 標題 2 paragraphs 段落 this is a paragraph 3 l...