介绍
这篇文章主要介绍怎么在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数据”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!