2015-12-15 60 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的所有源以确保使用新的缓冲区大小)。

相关问题