我正在运行一个使用gsoap库开发的Web服务客户端,我们需要通过相互认证的连接发送3.5 GB的数据 - 这意味着我们在网络上获得了加密流量。 服务器 - 我无法访问 - 表示它正在接收“空”数据。 我已经进行了网络流量捕获,发现传输过程中暂停(几秒钟),然后是“加密警报(21)”和连接关闭。
检查我的代码似乎序列化或发送数据存在一些问题,但我无法确切地知道发生了什么。
我怀疑gsoap无法分配必要的内存来序列化/发送数据。
我应该如何分析这个?
EDIT1: 我放弃了序列化路径,现在我的怀疑在于附件功能。似乎定义附件回调可能会解决我的问题。仍然对人们的意见和建议感兴趣。
答案 0 :(得分:0)
根据您的描述,XML序列化似乎不太可能是导致问题的原因。 gsoap中的标准基于HTTP的通信(即没有HTTP分块)在发送之前序列化C / C ++数据以确定HTTP内容长度。序列化失败会立即显示,而不是在传输过程中显示。
为了加速大型XML数据块的传输,您可以使用SOAP_XML_TREE
上下文标志优化XML序列化以初始化struct soap
上下文。这大大减少了SOAP编码开销。让我解释一下为什么会出现这种情况:SOAP 1.1 / 1.2编码协议会在gsoap引擎中产生开销,以便通过分析数据结构指针(例如图形,可能还有循环)来确定共同引用的元素。当使用大量指针时,这会影响XML序列化程序的性能。此外,调试模式(-DDEBUG
)将大大减慢gsoap引擎的速度,以避免大量传输。
也许像ssldump这样的工具可以更好地解决您遇到的TLS / SSL通信问题。