国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

node.js 使用 net 模塊模擬 websocket 握手進行數(shù)據(jù)傳遞操作示例

2024-05-06 15:44:21
字體:
供稿:網(wǎng)友

本文實例講述了node.js 使用 net 模塊模擬 websocket 握手進行數(shù)據(jù)傳遞操作。分享給大家供大家參考,具體如下:

websocket 是一種讓瀏覽器與服務(wù)器之間建立持久的連接,并能進行雙向數(shù)據(jù)傳輸?shù)囊环N協(xié)議。

websocket 屬性應(yīng)用層協(xié)議,基于tcp傳輸協(xié)議,并復(fù)用http的握手通道。

一、如何進行websocket連接。

websocket復(fù)用了http的握手通道,客戶端通過http請求與服務(wù)端進行協(xié)商,升級協(xié)議。協(xié)議升級完后,后面的數(shù)據(jù)交換則遵照websocket協(xié)議。

1、客戶端申請協(xié)議升級

Request URL: ws://localhost:8888/Request Method: GETConnection: UpgradeUpgrade: websocketSec-WebSocket-Version: 13Sec-WebSocket-Key: uR5YP/BMO6M24tAFcmHeXw==Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Connection: Upgrade 表示要升級協(xié)議 Upgrade: websocket 表示升級到websocket協(xié)議 Sec-WebSocket-Version: 13 表示websocket的版本 Sec-WebSocket-Key 表示websocket的驗證,防止惡意的連接,與服務(wù)端響應(yīng)的Sec-WebSocket-Accept是配套。

2、服務(wù)端響應(yīng)協(xié)議升級

Status Code: 101 Switching ProtocolsConnection: UpgradeSec-WebSocket-Accept: eS92kXpBNI6fWsCkj6WxH6QeoHs=Upgrade: websocket

Status Code:101 表示狀態(tài)碼,協(xié)議切換。

Sec-WebSocket-Accept 表示服務(wù)端響應(yīng)的校驗,與客戶端的Sec-WebSocket-Key是配套的。

3、Sec-WebSocket-Accept是如何計算的

將 Sec-WebSocket-Key 的值與 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 拼接。

然后通過sha1計算,再轉(zhuǎn)成base64。

const crypto = require('crypto');function getSecWebSocketAccept(key) {  return crypto.createHash('sha1')    .update(key + '258EAFA5-E914-47DA-95CA-C5AB0DC85B11')    .digest('base64');}console.log(getSecWebSocketAccept('uR5YP/BMO6M24tAFcmHeXw=='));

4、協(xié)議升級完后,后續(xù)的數(shù)據(jù)傳輸就需要按websocket協(xié)議來走。

websocket客戶端與服務(wù)端通信的最小單位是 幀,由1個或多個幀組成完整的消息。

客戶端:將消息切割成多個幀,發(fā)送給服務(wù)端。

服務(wù)端:接收到消息幀,將幀重新組裝成完整的消息。

5、數(shù)據(jù)幀的格式

單位是1個比特位,F(xiàn)IN,PSV1,PSV2,PSV3 占1個比特位,opcode占4個比特位。

0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7+-+-+-+-+-------+-+-------------+-------------------------------+|F|R|R|R| opcode|M| Payload len |  Extended payload length  ||I|S|S|S| (4) |A|   (7)   |       (16/64)      ||N|V|V|V|    |S|       |  (if payload len==126/127)  || |1|2|3|    |K|       |                |+-+-+-+-+-------+-+-------------+-------------------------------+|   Extended payload length continued, if payload len == 127 |+-------------------------------+-------------------------------+|                |Masking-key, if MASK set to 1 |+-------------------------------+-------------------------------+| Masking-key (continued)    |     Payload Data     |+-------------------------------+-------------------------------+|           Payload Data continued ...        |+---------------------------------------------------------------+|           Payload Data continued ...        |+---------------------------------------------------------------+            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 抚松县| 富阳市| 周口市| 孟州市| 三原县| 鄱阳县| 长治市| 梅州市| 伊宁市| 龙口市| 汶川县| 永寿县| 望都县| 台前县| 平遥县| 天台县| 黑河市| 柳州市| 临邑县| 喀喇沁旗| 莱西市| 曲麻莱县| 家居| 桐庐县| 云和县| 涿鹿县| 淮阳县| 南昌县| 宣恩县| 连云港市| 梁河县| 交城县| 色达县| 吉林省| 兰考县| 吴忠市| 房产| 贡觉县| 五华县| 新平| 吉林省|