我正在尝试使用 gSOAP Web 服务和 C++ 将图像从客户端应用程序发送到服务器。为此,我正在使用 Qt,我的客户端和服务器应用程序可以在 Windows 和 Linux 上运行。令人惊讶的是,对于一个 1MB 的 jpg 图像,将图像从客户端发送到运行在 Linux 和 Windows 平台上的同一台机器上的服务器大约需要 6 秒。我的应用程序是否有问题或任何其他 Web 服务技术是否需要相同的时间?
附言为了发送数据,我使用了 unsigned char * 类型。
编辑 1: 如何使用 base64 数据类型通过 gSOAP 发送二进制数据。在我阅读文档时,.stub 文件中没有可用的数据类型。
最佳答案
XSD base64Binary 类型是 XML 架构原生原始二进制类型。禁用 -DDEBUG
时性能应该非常好(因为消息记录很慢!)。
gSOAP 工具生成高效的 XML 序列化程序,这些序列化程序通过网络推送和拉取 base64,同时直接从/向原始数据转换。
以下是典型系统的一些数字,假设网络开销较低:
- 回显 1K base64 100 次(即使用 1K base64 的 200 条消息):
经过的实时时间 = 140(毫秒)CPU 时间 = 120 用户 = 40 系统 = 80
- 回显 100K base64 100 次(即使用 100K base64 的 200 条消息):
经过的实时时间 = 820(毫秒)CPU 时间 = 450 用户 = 280 系统 = 170
- 回显 1MB base64 100 次(即使用 1MB base64 的 200 条消息):
经过的实时时间 = 5650(毫秒)CPU 时间 = 3730 用户 = 2740 系统 = 990
网络带宽可能是影响您表现的一个因素。
附言。您可能想尝试使用 SOAP_IO_CHUNK
进行分块传输。一种更激进的方法是更改 SOAP_BUFLEN
(通常为 64K)以优化套接字缓冲区大小(并重新编译包含 stdsoap2.h
的所有源代码以确保使用新的缓冲区大小).
关于c++ - 为什么通过 gSOAP 发送二进制数据太慢了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34282236/