Bebop:基于型号的基于模式的二进制序列化格式

2021-03-30 17:31:39

我们知道你在想什么:还有另一种标准。在JSON,协议缓冲区,MessagePack和数十种其他格式的世界中,为什么重新发明轮子?

在Rainway,我们将视频游戏流传输到客户端应用程序。每秒60帧,需要每16毫秒传送视频和音频数据。 Gamepad,鼠标或键盘输入必须处理并将其流回到远程主机,实时所有。对我们来说,每毫秒的编码和解码事项。

此外,Radway在各种平台上运行:iOS,Android,嵌入式设备,Web浏览器等。在这些环境中的每一个中,我们需要高性能,我们必须让我们的开发团队轻松掌握许多编程语言的信心。

我们对其他解决方案的评估发现了客户端序列化性能差,大型运行时间开销,较差的浏览器支持以及驱动我们创建Bebop的不同权衡。

对于那些想知道的人来说,“对于我的分布式/联网应用程序的消息感到足够的人,这是足够好的?”它应该像使用Bebop一样容易,但更快和更安全。 (下图表显示每秒的操作,所以更高速度更快。)

这种速度和安全来自Bebop编译器,将描述数据结构的模式变为密切优化的“编码”和“解码”方法。生成的代码是支持它的语言类型安全,并调用它已经死了。

以下是使用Bebop生成的序列化代码在键入版中的示例:

Const Mysong:Isong = {Title:' Donna Lee' ,年:1947年,表演者:[{名:'查理帕克' ,播放:仪器。 SAX},{名:' Miles Davis' ,播放:仪器。喇叭},],}; const buffer =歌曲。编码(Mysong); const thesamesong =歌曲。解码(缓冲区);

许多语法都是显而易见的。值得注意的是,有两种方法可以在Bebop模式中聚合数据:

当始终存在所有字段时,使用结构,您永远不会添加更多字段(如struct point {int32 x; int32 y;}。)

使用字段丢失时使用邮件,并且在应用程序的更高版本中添加更多字段是有意义的。

此外,Bebop提供了有用的基础类型,如日期和GUID开箱即用。这样,没有“中间序列化步骤”将日期对象转换为UNIX时间戳和手动后退 - Bebop是节省您的努力。

对于大多数人阅读这个,Bebop很酷。尽管如此,您将不会跳转到现有的应用程序中。你已经建立在其他解决方案中,这很好,他们正在为你工作。

因此,无论您是开始构建下一个多人游戏应用程序还是RPC / IPC,或者您需要提高应用程序稳定性 - 对于性能而且您的整体生产率BBOP在此处。