分享NodeJs中TCP粘包、分包高性能解決方案

最新更新請查看githubgit

NodeJs中TCP粘包、分包解決方案!

配置介紹

1. 本類庫提供對TCP粘包處理的解決方案
2. 本庫默認緩衝512個字節,當接收數據超過512字節,自動以512倍數擴大緩衝空間
3. 本庫默認採用包頭兩個字節表示包長度
4. 本庫默認採用大端接模式接收數據
5. 本庫能夠配置自定義包頭長度[後期迭代]
6. 本頭能夠配置大端小端讀取[後期迭代]

```
測試案例
```
var Stick = require('./stickPackage');
let stick = new Stick();

//  構造一個buffer兩個字節爲包長
let bytes3 = Buffer.from([0x00, 0x02, 0x66, 0x66, 0x00, 0x04, 0x88, 0x02, 0x11, 0x11]);

//  構造一個buffer兩個字節爲包長,分兩個包
let bytes4 = Buffer.from([0x00, 0x02, 0x66, 0x66, 0x00, 0x04, 0x88, 0x02, 0x11]);
let bytes5 = Buffer.from([0x11]);

//  構造一個buffer兩個字節爲包長,總共512個字節包
let bytes6 = Buffer.from([0x01, 0xfe]);
let bytes7 = Buffer.alloc(510).fill(33);

//  構造一個buffer兩個字節爲包長,總共513個字節包
let bytes8 = Buffer.from([0x01, 0xff]);
let bytes9 = Buffer.alloc(511).fill(33);

// 解析出完整的數據包後觸發
stick.onData(function (data) {
    console.log('receive data,length:' + data.length);
    console.log('receive data,contents:' + JSON.stringify(data));
});

// 傳入10個字節,一個長度爲2,一個爲4的數據包
console.log('log:傳入兩個包,一次Put[驗證一次性Put數據包]');
stick.putData(bytes3);

// 傳入10個字節,一個長度爲2,一個爲4的數據包,分兩次Put
console.log('log:傳入兩個包,分兩次Put[驗證分兩次Put數據包]');
stick.putData(bytes4);
stick.putData(bytes5);

console.log('log:傳入512個字節的數據包[驗證緩衝全滿狀況]');
stick.putData(bytes6);
stick.putData(bytes7);

console.log('log:傳入513個字節的數據包[驗證緩衝擴增狀況]');
stick.putData(bytes8);
stick.putData(bytes9);

圖片描述

源碼地址:[喜歡的話請點star,想訂閱點watch]
https://github.com/lvgithub/stickPackage.git
相關文章
相關標籤/搜索