欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解如何在Node.js的httpServer中接收前端發(fā)送的arraybuffer數(shù)據(jù)

 更新時間:2018年11月11日 09:57:52   作者:楊周龍  
這篇文章主要介紹了詳解如何在Node.js的httpServer中接收前端發(fā)送的arraybuffer數(shù)據(jù),小編覺得挺不錯的,現(xià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);

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 初始Nodejs

    初始Nodejs

    本文屬于nodejs的基礎知識介紹篇,從nodejs的基本概念,到架構示意圖,同步異步等方面做了詳細的解答,是篇非常不錯的文章
    2014-11-11
  • Windows系統(tǒng)下Node.js的簡單入門教程

    Windows系統(tǒng)下Node.js的簡單入門教程

    這篇文章主要介紹了Windows系統(tǒng)下Node.js的簡單入門教程,Node.js是用于后端編程的JavaScript框架,需要的朋友可以參考下
    2015-06-06
  • 基于Node.js的強大爬蟲 能直接發(fā)布抓取的文章哦

    基于Node.js的強大爬蟲 能直接發(fā)布抓取的文章哦

    基于Node.js的強大爬蟲能直接發(fā)布抓取的文章哦!本爬蟲源碼基于WTFPL協(xié)議,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 詳解nodejs解壓版安裝和配置(帶有搭建前端項目腳手架)

    詳解nodejs解壓版安裝和配置(帶有搭建前端項目腳手架)

    這篇文章主要介紹了詳解nodejs解壓版安裝和配置(帶有搭建前端項目腳手架) ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • node.js中的fs.createReadStream方法使用說明

    node.js中的fs.createReadStream方法使用說明

    這篇文章主要介紹了node.js中的fs.createReadStream方法使用說明,本文介紹了fs.createReadStream方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • 從零開始學習Node.js系列教程四:多頁面實現(xiàn)的數(shù)學運算示例

    從零開始學習Node.js系列教程四:多頁面實現(xiàn)的數(shù)學運算示例

    這篇文章主要介紹了Node.js多頁面實現(xiàn)的數(shù)學運算,涉及nodejs請求響應、數(shù)值傳遞、運算等相關操作技巧,需要的朋友可以參考下
    2017-04-04
  • 基于Node.js構建一個靈活的CLI命令行工具

    基于Node.js構建一個靈活的CLI命令行工具

    在軟件開發(fā)中,命令行界面(CLI)工具是必不可少的助手,本文主要介紹了如何使用Node.js構建一個靈活的CLI工具,涵蓋從基礎命令處理到復雜的交互式問答和遠程模板下載,需要的可以參考下
    2024-03-03
  • 從零學習node.js之express入門(六)

    從零學習node.js之express入門(六)

    相信大家都知道Express是一個簡潔而靈活的 node.js Web應用框架, 提供了一系列強大特性幫助你創(chuàng)建各種 Web 應用,和豐富的 HTTP 工具。下面這篇文章主要介紹了node.js中express的入門知識,需要的朋友可以參考下。
    2017-02-02
  • Node.js中Swagger的使用指南詳解

    Node.js中Swagger的使用指南詳解

    Swagger(目前用OpenAPI?Specification代替)是一個用于設計、構建、記錄和使用REST?API的強大工具,本文將探討使用Swagger的一些關鍵技巧,需要的可以參考一下
    2024-01-01
  • Nodejs極簡入門教程(二):定時器

    Nodejs極簡入門教程(二):定時器

    這篇文章主要介紹了Nodejs極簡入門教程(二):定時器,本文講解了setTimeout、setInterval、setImmediate及process.nextTick等內(nèi)容,需要的朋友可以參考下
    2014-10-10

最新評論