使用模式创建缓冲区并通过Javascript中的WebSocket发送缓冲区的有效方法?

使用模式创建缓冲区并通过Javascript中的WebSocket发送缓冲区的有效方法?,javascript,json,node.js,websocket,protocol-buffers,Javascript,Json,Node.js,Websocket,Protocol Buffers,我正在编写一个浏览器游戏,正在寻找一种方法,可以向node.js服务器发送原始数组缓冲区,也可以从中发送原始数组缓冲区 我不喜欢通过WebSockets发送JSON字符串的想法,因为: 当接收者已经知道格式时,我必须指定密钥 如果发送格式错误的结构,则不会进行验证或检查(但不是必需的) 在对象中解析JSON字符串本质上比读取二进制文件慢 整个负载浪费的带宽是一个字符串(例如,不是压缩整数) 理想情况下,我将能够为每种消息类型创建一个模式,构造该消息,并将其原始数组缓冲区发送到服务器。大概是这样的

我正在编写一个浏览器游戏,正在寻找一种方法,可以向
node.js
服务器发送原始数组缓冲区,也可以从中发送原始数组缓冲区

我不喜欢通过
WebSockets
发送
JSON
字符串的想法,因为:

  • 当接收者已经知道格式时,我必须指定密钥
  • 如果发送格式错误的结构,则不会进行验证或检查(但不是必需的)
  • 在对象中解析JSON字符串本质上比读取二进制文件慢
  • 整个负载浪费的带宽是一个字符串(例如,不是压缩整数)
  • 理想情况下,我将能够为每种消息类型创建一个模式,构造该消息,并将其原始数组缓冲区发送到服务器。大概是这样的:

    schema PlayerAttack {
      required int32 damage;
      required int16[] coords;
      required string name;
    }
    
    var message = new PlayerAttack(5, [24, 32], "John");
    websockets.send(message.arrayBuffer());
    
    然后,它将作为缓冲区到达Node.js服务器,并具有解码到对象的选项


    谷歌几乎适合这个用例,但速度太慢,开销太大(比我的基准测试中的
    JSON.parse
    慢7倍,还包括一些我不需要的标记功能)。

    听起来你可能需要一个二进制打包器/解包,它可以根据某种格式描述工作。如果您搜索“Javascript二进制打包器”,您将发现几个。这是一对夫妇:和@jfriend00:谢谢。知道我要找的东西的名字肯定会有帮助:“带格式描述的二进制打包器”。我来看看这些。