当前位置: 首页 > 后端技术 > Node.js

分享NodeJs中TCP粘包和分包的高性能解决方案

时间:2023-04-03 16:26:32 Node.js

最新更新请查看githubNodeJs中的TCP粘包和分包解决方案!配置介绍1.该类库提供了TCP粘包处理的解决方案2.该库默认缓存512字节。当接收到的数据超过512字节时,自动将缓冲区空间扩大512的倍数。3.本库默认使用头二。一个byte表示数据包长度4.本库默认使用大端模式接收数据5.本库可以配置自定义header长度[后期迭代]6.这个header可以配置big-endian和small-endian读取[后面的迭代]```测试用例```varStick=require('./stickPackage');letstick=newStick();//构造一个buffer,两个字节为包长letbytes3=Buffer.from([0x00,0x02,0x66,0x66,0x00,0x04,0x88,0x02,0x11,0x11]);//以两个字节为数据包长度构造一个缓冲区,分成两个数据包letbytes4=Buffer.from([0x00,0x02,0x66,0x66,0x00,0x04,0x88,0x02,0x11]);letbytes5=Buffer.from([0x11]);//构造一个缓冲区,以两个字节为数据包长度,共512字节数据包letbytes6=Buffer.from([0x01,0xfe]);letbytes7=Buffer.alloc(510).fill(33);//构造一个buffer,以两个字节为包长,共513字节letbytes8=Buffer.from([0x01,0xff]);letbytes9=Buffer.alloc(511).fill(33);//triggerstick.onData(function(data){console.log('接收数据,length:'+数据长度);console.log('receivedata,contents:'+JSON.stringify(data));});//传入10个字节,一个长度为2,一个长度为4console.log('log:Incoming两个数据包,一个Put[verifyone-timePutdatapacket]');秒tick.putData(bytes3);//传入10个字节,一个长度为2,一个长度为4,分为两个Putconsole.log('log:传入两个包,分为两个Put[验证放数据包两次]');stick.putData(bytes4);stick.putData(bytes5);console.log('日志:传入的512字节数据包[验证缓冲区已满]');stick.putData(bytes6);stick.putData(bytes7);console.log('log:Incoming513-bytedatapacket[验证缓冲区扩展]');stick.putData(bytes8);stick.putData(bytes9);源码地址:【喜欢请点star,订阅请收看】https://github.com/lvgithub/stickPackage.git