2012-06-20 36 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

我使用完整版。 –