StickNode.js 中 TCP 粘包、分包解決方案
StickPackage,NodeJs 中 TCP 粘包、分包解決方案。
配置介紹
-
提供對(duì)TCP粘包處理的解決方案
-
默認(rèn)緩沖512個(gè)字節(jié),當(dāng)接收數(shù)據(jù)超過(guò)512字節(jié),自動(dòng)以512倍數(shù)擴(kuò)大緩沖空間
-
本默認(rèn)采用包頭兩個(gè)字節(jié)表示包長(zhǎng)度
-
默認(rèn)采用大端接模式接收數(shù)據(jù)
-
可以配置大端小端讀取
-
可以配置自定義包頭長(zhǎng)度
Changes:
-
設(shè)置大端,小端接收,添加setReadIntBE,添加setReadIntLE方法:
setReadIntBE(type) ,setReadIntLE(type) type:16 包頭長(zhǎng)度為2,short類(lèi)型 setReadIntBE(type) ,setReadIntLE(type) type:32 包頭長(zhǎng)度為4,int類(lèi)型
安裝
npm i stickpackage
使用方法
var Stick = require('stickpackage');
let stick = new Stick(1024).setReadIntBE('16')
/*
* 包含兩個(gè)數(shù)據(jù)包,10個(gè)字節(jié),包頭為short,兩個(gè)字節(jié):[0x00, 0x02],[ 0x00, 0x04]
* 數(shù)據(jù)包1:[0x00, 0x02, 0x66, 0x66]
* 數(shù)據(jù)包2:[0x00, 0x04, 0x88, 0x02, 0x11, 0x11]
*/
let data = Buffer.from([0x00, 0x02, 0x66, 0x66, 0x00, 0x04, 0x88, 0x02, 0x11, 0x11]);
/* 構(gòu)造兩個(gè)buffer
* data2_1包含: 第一個(gè)數(shù)據(jù)包的全部數(shù)據(jù),第二個(gè)數(shù)據(jù)包的部分?jǐn)?shù)據(jù)
* data2_2包含: 第二個(gè)數(shù)據(jù)包的剩余數(shù)據(jù)
*/
let data2_1 = Buffer.from([0x00, 0x00, 0x00, 0x02, 0x66, 0x66, 0x00, 0x04, 0x88, 0x02, 0x11]);
let data2_2 = Buffer.from([0x11]);
// 設(shè)置收到完整數(shù)據(jù)觸發(fā)器
stick.onData(function (data) {
console.log('receive data,length:' + data.length);
console.log(data)
});
stick.putData(data);
stick.putData(data2_1);
stick.putData(data2_2);
// 運(yùn)行結(jié)果:
// receive data,length:4 <Buffer 00 02 66 66>
// receive data,length:6 <Buffer 00 04 88 02 11 11>
// receive data,length:2< Buffer 00 00> receive data, length:4 < Buffer 00 02 66 66> receive data, length:6< Buffer評(píng)論
圖片
表情
