Google 协议缓冲区与 JSON:C++ 到 C# 的通信

Google Protocol Buffers Vs JSON: C++ to C# communication

我有两个应用程序通过 TCP 套接字进行通信。目前,这些应用程序都是本地的,但在未来,服务器应用程序将 运行 在云端(Amazon EC2 Instance)。

服务器应用程序是用C++编写的 客户端应用程序写在 C#

我正在从服务器向客户端发送一个具有以下属性的对象:

Guid Id
uint8* ImageData

不过,我可能希望将来添加额外的属性。但是,我会尽量保持这个对象尽可能小,因为这里的延迟很重要。

现在,我目前正在使用 JSON 在程序之间进行通信,但我想知道 Google 协议缓冲区 (GPB),因为 JSON 很好用with, plus 是人类可读的,它确实有很大的开销,并且从事物的外观来看,导致通信明显延迟。

我正在寻找的是一种更有效的客户端和服务器应用程序之间通信的方法。

GPB 与 JSON 相比如何?有没有人有高性能使用 GPB 的经验?还有其他更适合这里的协议吗?

这些参考资料会对您有所帮助。

https://google.github.io/flatbuffers/md__benchmarks.html

https://capnproto.org/news/2014-06-17-capnproto-flatbuffers-sbe.html

github 上有一个用于转换 JSON to/from protobuf 的 C++ 实现。

还有很多我们不知道的事情:

  • 通常uint8* ImageData有多大?
  • 如何将二进制数据序列化为JSON
  • 可用带宽是多少
  • 平均和预期数据速率是多少

我想说的是,只有当它很重要时,您才需要担心 JSON 开销,否则为什么要更改任何内容。您提到了延迟,但只有当您要发送的数据多于可用带宽时才会受到影响。

对于您极其简单的情况,我什至不会使用 JSON,而是手动将其序列化为二进制 blob,除非您预计将来您的协议会发生重大变化。