2015-12-15 59 views
1

我正在嘗試使用gSOAP Web服務和C++將客戶端應用程序的映像發送到服務器。爲此,我使用Qt,我的客戶端和服務器應用程序可以在Windows和Linux上運行。令人驚訝的是,對於1MB的jpg圖像,在Linux和Windows平臺上,在同一臺機器上運行客戶端到服務器的映像大約需要6秒。我的應用程序出現了什麼問題,或者其他任何Web服務技術都需要同一時間嗎?爲什麼通過gSOAP發送二進制數據太慢?

P.S.要發送數據,我使用的類型爲unsigned char *

編輯1:如何使用base64數據類型通過gSOAP發送二進制數據。在閱讀文檔時,.stub文件中沒有可用的數據類型。

+0

客戶端和服務器位於何處?特別是他們如何相對於彼此進行定位?即他們在本地網絡上嗎?彼此之間的世界中途? –

+0

@JoachimPileborg它們位於同一臺機器上! – hsalimi

+1

總共發送了多少數據? (圖像數據可能是基於64編碼發送的?) –

回答

2

XSD base64Binary類型是XML架構原生的原始二進制類型。 -DDEBUG禁用(因爲消息記錄慢!),性能應該非常好。

gSOAP工具生成高效的XML串行器,在直接從原始數據轉換爲原始數據的同時,通過導線推拉base64。

下面是一個典型的系統上的一些數字,假設低網絡開銷:

  • 回聲1K的base64 100倍(即200條消息與1K的base64):
    Elapsed real time = 140 (ms) CPU time = 120 user = 40 system = 80
  • 回聲100K的base64 100倍(即200條消息與100K的base64):帶有1MB的base64
    Elapsed real time = 820 (ms) CPU time = 450 user = 280 system = 170
  • 回聲1MB的base64 100倍(即200條消息):
    Elapsed real time = 5650 (ms) CPU time = 3730 user = 2740 system = 990

網絡帶寬可能是您的性能的一個因素。

PS。您可能想嘗試SOAP_IO_CHUNK分塊傳輸。更積極的方法是更改​​SOAP_BUFLEN(通常爲64K)以優化套接字緩衝區大小(並重新編譯包含stdsoap2.h的所有源以確保使用新的緩衝區大小)。

相關問題