为什么通过 gSOAP 发送二进制数据太慢了?

Why sending binary data over gSOAP is too much slow?

我正在尝试使用 gSOAP Web 服务和 C++ 将图像从客户端应用程序发送到服务器。为此,我正在使用 Qt,我的客户端和服务器应用程序可以在 Windows 和 Linux 上运行。令人惊讶的是,对于 1MB 的 jpg 图像,在 Linux 和 Windows 平台上的同一台机器上,将图像从客户端发送到服务器 运行 大约需要 6 秒。我的应用程序有问题还是其他任何网络服务技术需要相同的时间?

P.S。为了发送数据,我使用 unsigned char * 类型。

编辑 1: 如何使用 base64 数据类型通过 gSOAP 发送二进制数据。在我阅读文档时,.stub 文件中没有可用的数据类型。

XSD base64Binary 类型是 XML 模式原生原始二进制类型。禁用 -DDEBUG 时性能应该非常好(因为消息记录很慢!)。

gSOAP 工具生成高效的 XML 序列化程序,在直接转换 from/to 原始数据的同时通过网络推送和拉取 base64。

假设网络开销较低,以下是典型系统的一些数字:

  • 回显 1K base64 100 次(即使用 1K base64 的 200 条消息):
    Elapsed real time = 140 (ms) CPU time = 120 user = 40 system = 80
  • 回显 100K base64 100 次(即使用 100K base64 的 200 条消息):
    Elapsed real time = 820 (ms) CPU time = 450 user = 280 system = 170
  • 回显 1MB base64 100 次(即使用 1MB base64 的 200 条消息):
    Elapsed real time = 5650 (ms) CPU time = 3730 user = 2740 system = 990

网络带宽可能会影响您的表现。

PS。您可能想尝试 SOAP_IO_CHUNK 进行分块传输。更激进的方法是更改​​ SOAP_BUFLEN(通常为 64K)以优化套接字缓冲区大小(并重新编译所有包含 stdsoap2.h 的源代码以确保使用新的缓冲区大小)。