2012-06-20 121 views
5

我写一个多线程的C++(Linux)的SOAP客户端,与必发API接口。我最初试图去熟悉gSOAP,但是我无法使用多个WSDL文件正确工作,因此我暂时放弃了这一点。我已经实现了自己的类,用于存储数据并使用RapidXML解析/生成XML - 我正在寻找建议的唯一方法是用于HTTPS传输方面。我已经使用OpenSSL和libcurl实现了一些初始测试应用程序,这些工作都很好,但我在多线程方面遇到了一些问题,它们比C++更加C,而且老实说,我一直在寻找更新的东西。所以我的问题是 - 如果我要从头开始重写这个,那么使用什么来处理HTTPS传输是最好的工具。我已经研究了以下的可能性编写C++ SOAP(多线程)客户端应用程序 - 无需gSOAP的

  1. OpenSSL的(实现)
  2. 的libcurl(实现)
  3. 的boost :: ASIO库(没试过,因为至今我还没有涉足升压)
  4. 尝试使用套接字编程自己做这一切(不喜欢这种方法)
  5. 只是尝试和强硬的gSOAP和拖网的方式来使其工作。
  6. 完全不同的东西,我还没有遇到过。

所以基本上,考虑到上面有人建议作为最好的方法来使用固体性能和最小的多线程问题?或者有没有人有任何上述任何经验,并劝阻我使用它? 任何建议和意见将受到感谢。

回答

3

如果你担心性能,以我的经验的boost :: ASIO往往非常好尤其是规模大的多线程项目。不过请注意,boost :: asio是一个相当低层的套接字定向库,所以你必须深入研究; HTTPS的boost :: asio有一些很好的例子,例如, this。我会拒绝你的自己动手的套接字想法,因为那只是boost :: asio提供的。

我个人没有与libcurl的工作还没有,但OpenSSL的提供相当高水平的API,应包括你需要的一切;尽管如此,你会以性能价格购买便利。在大多数情况下,缺乏表现将是微不足道的,因此可以忽略,但这取决于您的应用。对于客户端SOAP请求来说gSOAP非常适合,但说实话,服务器端支持是非常少的,而且你必须做很多调整才能在多线程应用程序中支持多个WSDL文件。我个人会投票反对这样做。

总之,我想如果你想最大限度地提高性能,并感觉舒服插座和OpenSSL,如果方便,快速的发展有更高的优先使用boost :: ASIO。

+0

感谢。我确实喜欢你的回答,但在接受之前,我会等待并看看我是否收到更多回复。我很高兴你也认为gSOAP值得放弃,因为我花了几个小时试图配置它。 – mathematician1975

2

我使用Poco图书馆写我自己的客户端。它包含您为此目的需要的一切。

  • XML解析器(支持DOM和SAX API);
  • HTTP和HTTPS客户端。
+0

它是免费提供还是必须购买? – mathematician1975

+0

Poco图书馆有三个版本。基本版和完整版在[Boost Software License](http://pocoproject.org/license.html)下发布。 –

+0

我使用完整版。 –