2016-01-22 91 views
0

我有两个应用程序通过TCP套接字进行通信。目前,这些应用程序都是本地应用程序,但将来,服务器应用程序将在云上运行(Amazon EC2实例)。谷歌协议缓冲区VS JSON:C++到C#通信

服务器应用程序是用C++ 客户端应用程序被写入C#

我送从服务器的目的是客户端具有以下属性:

Guid Id 
uint8* ImageData 

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

现在,我正在使用JSON在程序之间进行通信,但我对Google协议缓冲区(GPB)感到疑惑,因为虽然JSON非常好,并且可以工作在东部,加上它是人类可读的,但它确实有很大开销和从外观上看,正在引起通信的显着延迟。

我在找什么,是一种更高效的客户端和服务器应用程序之间通信的方法。

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

+1

Google协议缓冲区经过优化以节省带宽。从这个角度来看,JSON(因为它是面向文本的)非常糟糕。 –

回答

0

是有很多事情我们不知道:

  • 多大uint8* ImageData一般?
  • 你怎么序列化的二进制数据,以JSON
  • 什么是可用带宽
  • 什么是平均预期的数据速率

我想要说的是,你需要担心的只有JSON开销如果它很重要,否则为什么要改变任何事情。您提到了延迟,但只有在发送更多数据时才会受到影响。

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

+0

谢谢,@AndyT。 'ImageData'通常大小约为1mb。关于“带宽”,你能告诉我如何计算我的可用带宽吗? – pookie

+0

你可以通过www.speedtest.net来计算它。 1MB足够大,根本不用担心JSON开销,无论你的带宽是多少 –

+0

太好了,谢谢! – pookie