Google Protocol Buffers Vs JSON:C ++到C#的通信

时间:2016-01-22 12:20:52

标签: c# c++ json sockets protocol-buffers

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

Server应用程序是用C++编写的 客户端应用程序使用C#

编写

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

Guid Id
uint8* ImageData

虽然,我可能希望将来添加额外的属性。但是,我会尝试尽可能减少此对象,因为延迟在这里很重要。

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

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

GPB如何与JSON进行比较?有没有人有过使用GPB的高性能经验?还有其他协议可能更适合吗?

2 个答案:

答案 0 :(得分:1)

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

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

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

github上有一个用于将JSON转换为/来自protobuf的C ++实现。

答案 1 :(得分:0)

我们不知道有很多事情:

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

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

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