2016-01-22 95 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