怎么在node . js的httpServer中接收前端发送的arraybuffer数据

  介绍

这篇文章主要介绍怎么在node . js的httpServer中接收前端发送的arraybuffer数据,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

最近使用了protobuf进行数据交互,发送在node . js接收前端的二进制数据出现了数据错误等问题。后来发现思路上面的问题,在req.on(& # 39;数据# 39;()=在{})事件中的处理不适当才引发数据错乱。借此发

我先直接贴正确接收二进制数据代码

const  server =, http.createServer((点播,res),=祝辞,{   ,,,如果(req.method===& # 39;选项# 39;){   ,,,,,res.setHeader (“Access-Control-Allow-Origin",,“*”);   ,,,,,res.statusCode=200;   ,,,}   ,,,如果(req.method===& # 39;文章# 39;){   ,,,,//,存储数组空间   ,,,,let 味精=[];   ,,,,//,接收到数据消息   ,,,,req.on(& # 39;数据# 39;(块)=祝辞{   ,,,,,如果(块){   ,,,,,,msg.push(块);   ,,,,,}   ,,,,})   ,,,,//,接收完毕   ,,,,req.on(& # 39;结束# 39;()=祝辞{   ,,,,,//,对缓冲区数组阵列列表进行缓冲合并返回一个缓冲区   ,,,,,let  buf=Buffer.concat(味精);   ,,,,,conosole.log (buf)//提取缓冲正确   ,,,,}),,,,,,,,,   },,   });   server.listen (3000 & # 39; 127.0.0.1 # 39;);

在nodejs中接收缓冲区数据需要以数组阵列的方式存储然后通过缓冲区。concat对数组阵列合并创建新的arraybuffer。这样就正确的接收二进制数据了。

<强>示例二:

以后端传送threejs中的点阵数组为例:

后端:

let  buffer =, Buffer.alloc((时间+ points.length  4), *, 4)//points.length  +, 4:预留前四个数字为其他信息(比如两个数字为一组,或者三个数字为一组)   ,//预留位置   buffer.writeFloatLE (1, 0)   buffer.writeFloatLE (2, 4)   buffer.writeFloatLE (3, 8)   buffer.writeFloatLE (4, 12)//缓冲前四个数为信息//点数据从第16位开始写入   for  (let 小姐:=,0,,len =, points.length;,小姐:& lt;, len;,我+ +),{   [我]buffer.writeFloatLE(点,,小姐:*,4,+,16)   }   res.send(缓冲)

前端:

let  pointXhr =, new  XMLHttpRequest ()   时间=pointXhr.onreadystatechange  function  (), {   var  DONE =, pointXhr.DONE  | |, 4;   if  (pointXhr.readyState ===,完成),{   let  buffer =pointXhr.response   let  bufferArray =, new  Float32Array(缓冲);   for  (var 小姐:=,0;,小姐:& lt;, buffer.length;, + + i), {   bufferArray[我],=,缓冲[我];   }   let  pointsArray =, bufferArray.slice (4)   let  points =, []//pointsArray 点阵从第5个开始(前四个数为其他信息)   for  (let 小姐:=,0,,l =, pointsArray.length /, 3;,小姐:& lt;, l;,我+ +),{   points.push ({   x: pointsArray小姐:*,3,   y: pointsArray[小姐:*,3,+,1],   z: pointsArray[小姐:*,3,+,2]   })   }   回调(分)   }   }   pointXhr.open (“POST"、url、真实);   时间=pointXhr.responseType  & # 39; arraybuffer& # 39;;   pointXhr.send (null);

前端接收图片缓冲

let  imageXhr =, new  XMLHttpRequest ()   时间=imageXhr.onreadystatechange  function  (), {   var  DONE =, imageXhr.DONE  | |, 4;   if  (imageXhr.readyState ===,完成),{   if  (imageXhr.response), {   let  bufferArray =imageXhr.response   let  uint8Array =, new  Uint8Array (bufferArray);   for  (var 小姐:=,0;,小姐:& lt;, bufferArray.length;, + + i), {   uint8Array[我],=,bufferArray[我];   }   回调(uint8Array)   }   }   }   imageXhr.open (“POST"、url、真实);   时间=imageXhr.responseType  & # 39; arraybuffer& # 39;;   imageXhr.send (null);

以上是“怎么在node . js的httpServer中接收前端发送的arraybuffer数据”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

怎么在node . js的httpServer中接收前端发送的arraybuffer数据