Html5引入webSocket來實現(xiàn)數(shù)據(jù)的實時交互,。 要想自己編寫個webSocket服務(wù)器,必須對webSocket協(xié)議有所了解才行,。 WebSocket協(xié)議主要分為兩部分:連接許可驗證 和驗證后的數(shù)據(jù)交互,。 連接許可驗證就是進(jìn)行一次握手操作,由Client發(fā)送一個類似于HTTP的請求,服務(wù)端獲取請求后 將發(fā)送過來的數(shù)據(jù)中的 Sec-WebSocket-Key 解析出來,,然后按照把“Sec-WebSocket-Key”加上一個魔幻字符串“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”,。使用SHA-1加密,之后進(jìn)行BASE-64編碼,,將結(jié)果做為“Sec-WebSocket-Accept”頭的值,,返回給客戶端。 連接請求內(nèi)容:
服務(wù)端返回內(nèi)容:
數(shù)據(jù)交互格式如下:
各字段的解釋: FIN 1bit 表示信息是否結(jié)束, 如果為1則該消息為消息尾部,如果為零則還有后續(xù)數(shù)據(jù)包; RSV 1-3 1bit 備用字段 默認(rèn)都為 0 Opcode 4bit 消息類型,消息類型暫定有15種,其中有幾種是預(yù)留設(shè)置,。 Mask 1bit 掩碼,,是否加密數(shù)據(jù),(客戶端發(fā)送給后端時,,mask必須為1,,否則close連接,;服務(wù)器發(fā)送給前端時,,mask必須為0,否則斷開連接) Payload len 7bit 數(shù)據(jù)的長度,,當(dāng)這個7 bit的數(shù)據(jù) == 126 時,,后面的2 個字節(jié)表示數(shù)據(jù)長度,,當(dāng)它 == 127 時,后面的 8 個字節(jié)表示數(shù)據(jù)長度 Masking-key 0/32 bit 掩碼值( Mask為1時才有) Payload data 長度為Payload len的數(shù)據(jù),,如果有掩碼 需要用mask-Key來異或 才能得到 下圖為opcode 所代表的意思
|
|
來自: 獵狐肥 > 《WebSocket》