代码之家  ›  专栏  ›  技术社区  ›  Eben Kadile

如何在typescript中通过websocket接收浮点数据

  •  4
  • Eben Kadile  · 技术社区  · 7 年前

    我知道没有办法像字符串那样轻松地发送和接收浮动。但是,如果我这样设置websocket:

    ws = new WebSocket(address);
    ws.binaryType = 'blob';
    

    我应该能够将传入的bytestring转换为float。将float转换为bytestring并在服务器端发送它们很容易。

    我能找到的最接近答案是 this . 然而,我发现 e.target.result 没有定义。我试着用 e.target

    this ,将uint数组转换为浮点数。但是如果我有这样的东西

    ws.onmessage = function(event){
      //do something with event.data
    }
    

    我需要了解如何与他人合作 event.data 当它不仅仅是一个字符串时 here .

    1 回复  |  直到 7 年前
        1
  •  3
  •   Eben Kadile    7 年前

    改编后 this answer this answer ,我提出了以下解决方案:

    //open the socket and set the data type to blob
    let socket = new WebSocket(address);
    socket.binaryType = 'blob';
    
    //we will store 6 positions at a time
    let positions = new Float32Array(18);
    
    //helpers
    let buffer = new ArrayBuffer(4);
    let view = new DataView(buffer);
    
    //say hello
    socket.onopen = function(){
      socket.send('Hello');
    };
    
    //keep track of where we are in the position array
    let posIndex = 0;
    
    socket.onmessage = function(msg){
      //convert message to Uint8 array
      let bitArray = new Uint8Array(msg.data);
      for(let i = 0; i < 3; i++){
        for(let j = 0; j < 4; j++){
          //set the elements of the DataView equal to the bytes
          view.setUint8(j, bitArray[4*i + j]);
        }
    
        //update the positions
        if(posIndex < 5){
          positions[3*posIndex + i] = view.getFloat32(0);
          posIndex++;
        }
        else positions[15 + i] = view.getFloat32(0);
      }
    
      //this should log the positions as they come in
      paragraph.innerHTML = paragraph.innerHTML + ",("
                          + positions[posIndex] + ","
                          + positions[posIndex + 1] + ","
                          + positions[posIndex + 2] + ")";
    
      //the server won't send another position until it hears from the client
      socket.send('r');
    };
    
    推荐文章