【问题标题】:Is it possible to stream serialized data into file with flatbuffers?是否可以使用 flatbuffers 将序列化数据流式传输到文件中?
【发布时间】:2020-01-20 14:55:35
【问题描述】:

我正在使用 node.js 制作在线游戏,并尝试在我的游戏服务器上保存游戏回放。我正在使用平面缓冲区来序列化客户端-服务器通信的数据,我认为将我的游戏状态逐帧保存在文件中会很酷。

我在.fbr 文件中创建了下表

table Entity {
    id: ushort;
    pos: Vec2;
}

table Frame {
    entities: [Entity];
}

table Replay {
    frames: [Frame];
}

有没有办法即时将所有游戏状态帧写入文件?我知道我可以缓冲 N 帧并将它们保存在单独的重播文件中,但我觉得应该有更好的方法。我希望我的回放在一个文件中,否则以后使用会很不方便。

【问题讨论】:

    标签: javascript node.js serialization flatbuffers


    【解决方案1】:

    最好的方法是确保每个单独的 FlatBuffer 是一个“大小前缀缓冲区”(它在实际缓冲区之前有 32 位大小),在 JS 中您可以通过调用 this 而不是常用finish函数:https://github.com/google/flatbuffers/blob/6da1cf79d90eb242e7da5318241d42279a3df3ba/js/flatbuffers.js#L715

    然后您将这些缓冲区一个接一个地写入一个打开的文件中。读取的时候,因为buffers都是以size开头的,所以可以一个一个的处理。我在 JS 中没有看到任何辅助函数,因此您可能必须自己执行此操作:读取 4 个字节以找出大小,然后读取大小字节,重复。

    【讨论】:

    • 实际上代码生成器创建了getSizePrefixedRootAsReplay()方法。但它的代码是getRootAsReplay() 的精确副本。 JS API 没写完?
    • @George 是的,那些刚刚在github.com/google/flatbuffers/pull/5717中修复了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多