【问题标题】:How do you send typed arrays over socket.io?如何通过 socket.io 发送类型化数组?
【发布时间】:2020-04-17 21:26:37
【问题描述】:

您好,我正在尝试使用 socket.io 将 Int16Array 从我的 node.js 服务器发送到浏览器客户端。当我 console.log 数组客户端时,它给了我:“Object { 0: 1, 1: 25, 2: 45 }”,而不是“Int16Array(3) [1, 25, 45]”的预期输出。这让我很困惑,因为从客户端到服务器的相同命令给了我预期的响应。

这是我的服务器:

    var myArray = [1, 25, 45];
    io.send( Int16Array.from(myArray) ); 

这是我的客户:

socket.on('message', function(x){ 
    console.log(x);
});

【问题讨论】:

    标签: javascript node.js socket.io


    【解决方案1】:

    通过 JSON.stringify 序列化时不会保留对象类型,我敢打赌这就是这里发生的事情。试试typeson

    【讨论】:

    • 是的,但显然有一种方法可以直接发送二进制数据,例如在类型化数组中,而无需将其转换为 json。
    • 他们以一种特殊的方式处理这些,我猜。很容易检查您想要的是否可行 - 您在客户端上获得的 JSON 应该有一个可以携带类型信息的扩展,例如 JSON .NET 使用的 $type。否则,类型信息丢失
    【解决方案2】:

    您可以使用Object.values() 将每个对象属性的值放入一个数组中,如下所示:

    socket.on('message', function(x){ 
        console.log(Object.values(x));
    });
    

    更多:Object.values()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      • 2012-07-25
      • 1970-01-01
      相关资源
      最近更新 更多