1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務時間:8:30-17:00
      你可能遇到了下面的問題
      關閉右側工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      怎么在Node.js的httpServer中接收前端發(fā)送的arraybuffer數(shù)據(jù)

      這篇文章主要介紹怎么在Node.js的httpServer中接收前端發(fā)送的arraybuffer數(shù)據(jù),文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

      成都創(chuàng)新互聯(lián)公司是創(chuàng)新、創(chuàng)意、研發(fā)型一體的綜合型網(wǎng)站建設公司,自成立以來公司不斷探索創(chuàng)新,始終堅持為客戶提供滿意周到的服務,在本地打下了良好的口碑,在過去的十余年時間我們累計服務了上千家以及全國政企客戶,如公路鉆孔機等企業(yè)單位,完善的項目管理流程,嚴格把控項目進度與質(zhì)量監(jiān)控加上過硬的技術實力獲得客戶的一致贊譽。

      最近使用了protobuf進行數(shù)據(jù)交互,發(fā)送在node.js接收前端的二進制數(shù)據(jù)出現(xiàn)了數(shù)據(jù)錯誤等問題。后來發(fā)現(xiàn)思路上面的問題,在req.on('data',()=>{})事件中的處理不適當才引發(fā)數(shù)據(jù)錯亂。借此發(fā)

      我先直接貼正確接收二進制數(shù)據(jù)代碼

      const server = http.createServer((req, res) => {
          if(req.method==='OPTIONS'){
            res.setHeader("Access-Control-Allow-Origin", "*");
            res.statusCode=200;
          }
          if(req.method==='POST'){
           // 存儲數(shù)組空間
           let msg=[];
           // 接收到數(shù)據(jù)消息
           req.on('data',(chunk)=>{
            if(chunk){
             msg.push(chunk);
            }
           })
           // 接收完畢
           req.on('end',()=>{
            // 對buffer數(shù)組陣列列表進行buffer合并返回一個Buffer
            let buf=Buffer.concat(msg);
            conosole.log(buf)//提取Buffer正確
           })         
      }  
      });
      server.listen(3000,'127.0.0.1');

      在nodejs中接收buffer數(shù)據(jù)需要以數(shù)組陣列的方式存儲然后通過buffer.concat對數(shù)組陣列合并創(chuàng)建新的arraybuffer。這樣就正確的接收二進制數(shù)據(jù)了。

      示例二:

      以后端傳送threejs中的點陣數(shù)組為例:

      后端:

      let buffer = Buffer.alloc((points.length + 4) * 4)
      
      //points.length + 4:預留前四個數(shù)字為其他信息(比如兩個數(shù)字為一組,或者三個數(shù)字為一組)
       
      //預留位置
      buffer.writeFloatLE(1, 0)
      buffer.writeFloatLE(2, 4)
      buffer.writeFloatLE(3, 8)
      buffer.writeFloatLE(4, 12)
      
      //buffer前四個數(shù)為信息
      //point數(shù)據(jù)從第16位開始寫入
      for (let i = 0, len = points.length; i < len; i++) {
        buffer.writeFloatLE(points[i], i * 4 + 16)
      }
      res.send(buffer)

      前端:

      let pointXhr = new XMLHttpRequest()
      pointXhr.onreadystatechange = function () {
        var DONE = pointXhr.DONE || 4;
        if (pointXhr.readyState === DONE) {
          let buffer = pointXhr.response
          let bufferArray = new Float32Array(buffer);
          for (var i = 0; i < buffer.length; ++i) {
            bufferArray[i] = buffer[i];
          }
          let pointsArray = bufferArray.slice(4)
          let points = []
          //pointsArray 點陣從第5個開始(前四個數(shù)為其他信息)
          for (let i = 0, l = pointsArray.length / 3; i < l; i++) {
            points.push({
              x: pointsArray[i * 3],
              y: pointsArray[i * 3 + 1],
              z: pointsArray[i * 3 + 2]
            })
          }
          callback(points)
        }
      }
      pointXhr.open("POST",url,true);
      pointXhr.responseType = 'arraybuffer';
      pointXhr.send(null);

      前端接收圖片buffer

      let imageXhr = new XMLHttpRequest()
      imageXhr.onreadystatechange = function () {
        var DONE = imageXhr.DONE || 4;
        if (imageXhr.readyState === DONE) {
          if (imageXhr.response) {
            let bufferArray = imageXhr.response
            let uint8Array = new Uint8Array(bufferArray);
            for (var i = 0; i < bufferArray.length; ++i) {
            uint8Array[i] = bufferArray[i];
          }
          callback(uint8Array)
          }
        }
      }
      imageXhr.open("POST",url,true);
      imageXhr.responseType = 'arraybuffer';
      imageXhr.send(null);

      以上是“怎么在Node.js的httpServer中接收前端發(fā)送的arraybuffer數(shù)據(jù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


      網(wǎng)頁題目:怎么在Node.js的httpServer中接收前端發(fā)送的arraybuffer數(shù)據(jù)
      轉載注明:http://ef60e0e.cn/article/pddhid.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        浦城县| 石嘴山市| 福贡县| 名山县| 张家口市| 华安县| 江安县| 竹山县| 花莲县| 南木林县| 古蔺县| 都江堰市| 双桥区| 南江县| 巫溪县| 灌阳县| 深水埗区| 台东市| 蕉岭县| 南京市| 永宁县| 罗源县| 紫阳县| 瓦房店市| 都安| 城步| 浪卡子县| 广饶县| 海盐县| 鹤岗市| 柳林县| 五大连池市| 黔江区| 彝良县| 盖州市| 竹溪县| 平乐县| 双流县| 大石桥市| 高平市| 萝北县|