Можно ли передавать сериализованные данные в файл с помощью плоских буферов? - PullRequest
0 голосов
/ 20 января 2020

Я делаю онлайн-игру в node.js и пытаюсь сохранить повтор игры на сервере моей игры. Я использую плоские буферы для сериализации данных для связи клиент-сервер, и я подумал, что было бы здорово сохранять состояние моей игры кадр за кадром в файле.

Я создал следующую таблицу в моем .fbr файле

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

table Frame {
    entities: [Entity];
}

table Replay {
    frames: [Frame];
}

Можно ли записать все фреймы состояния игры в файл на лету? Я знаю, что могу просто буферизовать N кадров и сохранять их в отдельных файлах воспроизведения, но я чувствую, что должен быть лучший способ. Я хочу, чтобы мое воспроизведение было в одном файле, иначе было бы очень неудобно использовать его потом.

1 Ответ

1 голос
/ 20 января 2020

Лучший способ сделать это - убедиться, что каждый отдельный FlatBuffer является «буфером с префиксом размера» (он имеет 32-битный размер перед фактическим буфером), который в JS можно создать, вызвав его вместо этого обычной функции finish: https://github.com/google/flatbuffers/blob/6da1cf79d90eb242e7da5318241d42279a3df3ba/js/flatbuffers.js#L715

Затем вы записываете эти буферы один за другим в открытый файл. При чтении, поскольку буферы начинаются с размера, вы можете обрабатывать их один за другим. Я не вижу никаких вспомогательных функций для этого в JS, поэтому вам, возможно, придется сделать это самостоятельно: прочитать 4 байта, чтобы узнать размер, затем прочитать байты размера, повторить.

...