使用C++编写一个SOAP(多线程)客户端应用程序 - 不使用gSOAP。

5
我正在编写一个多线程的C++(Linux)SOAP客户端来与Betfair API进行交互。我最初尝试使用gSOAP,但是由于我无法正确地使用多个WSDL文件,所以暂时放弃了它。我已经实现了自己的类来存储数据和解析/生成XML,使用RapidXML - 我唯一需要建议的是在HTTPS传输方面使用什么。我已经使用OpenSSL和libcurl实现了一些初始测试应用程序,这些应用程序工作正常,但是我在多线程方面遇到了一些问题,而且它们更像是C而不是C ++,说实话,我正在寻找更新一点的东西。因此,我的问题是 - 如果我要从头开始重写这个,那么处理HTTPS传输的最佳工具是什么?我已经研究了以下可能性:
  1. OpenSSL(已实现)
  2. libcurl(已实现)
  3. boost :: asio库(尚未尝试,因为我尚未涉足Boost)
  4. 尝试使用套接字编程自己完成所有操作(不喜欢这种方法)
  5. 只需尝试并坚持使用gSOAP,并搜索使其正常工作的方法。
  6. 完全不同的我还没有接触过的东西。
因此,基于上述情况,有什么建议是在性能稳定和最小化多线程问题方面使用的最佳方法?或者是否有任何使用以上任何一种工具时出现性能差的经验,并劝阻我不要使用它?任何建议和意见将不胜感激。
2个回答

3
如果您担心性能问题,根据我的经验,特别是在大型多线程项目中,boost::asio往往具有良好的可扩展性。请注意,boost::asio是一个相当低级别的面向套接字的库,因此您将不得不深入挖掘它;关于使用boost::asio进行HTTPS的一些不错的示例,例如这个。我会拒绝您的自己动手实现套接字的想法,因为这正是boost::asio所提供的。
我个人还没有使用过libcurl,但OpenSSL提供了相当高级的API,应该可以涵盖您需要的所有内容;但您需要以性能为代价来换取方便。在大多数情况下,性能损失将是微不足道的,因此可以忽略不计,但这取决于您的应用程序。
gSOAP非常适合客户端SOAP请求,但说实话,服务器支持相对较少,并且您需要进行许多调整才能支持多个WSDL文件在多线程应用程序中。我个人也会反对这样做。
总之,如果您想最大化性能并感觉舒适处理套接字,则应使用boost::asio,如果方便和快速开发具有更高的优先级,则应使用OpenSSL。

谢谢你的回答。我很喜欢你的答案,但在接受之前,我会等待并查看是否还有其他回复。我很高兴你也认为gSOAP值得抛弃,因为我浪费了大量时间尝试配置它。 - mathematician1975

2

我使用 Poco 库编写了自己的客户端,它包含了你需要的一切。

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

它是免费提供的还是必须购买? - mathematician1975
Poco库有三个版本。基础版和完整版是在Boost软件许可证下发布的。 - Denis Novikov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接