2012-06-20 18 views
5

Estoy escribiendo un cliente SOAP multiproceso C++ (Linux) para interactuar con la API de Betfair. Inicialmente, intenté comprender gSOAP, pero simplemente no puedo hacer que funcione correctamente utilizando varios archivos WSDL, por lo que lo he abandonado temporalmente. Implementé mis propias clases para almacenar datos y analizar/generar XML usando RapidXML. Lo único que busco es qué usar para el aspecto de transporte HTTPS. He implementado algunas aplicaciones de prueba iniciales usando OpenSSL y libcurl, estas funcionan bien pero he tenido algunos problemas con los aspectos multiproceso y son más C que C++, y para ser sincero, estaba buscando algo un poco más actualizado. Así que mi pregunta es esta: si tuviera que volver a escribir esto desde cero, ¿cuál sería la mejor herramienta para usar para manejar el transporte HTTPS? He investigado la siguiente como posibilidadesEscribiendo una aplicación de cliente C++ SOAP (multiproceso) - sin gSOAP

  1. OpenSSL (implementado)
  2. libcurl (implementado)
  3. impulso :: biblioteca ASIO (no tratado, porque aún no he incursionado con Boost)
  4. tratar de Hágalo todo yo mismo usando la programación de socket (no estoy interesado en este enfoque)
  5. Solo intente y resuelva gSOAP y rastree la web para encontrar formas de hacerlo funcionar.
  6. Algo totalmente diferente que aún no he encontrado.

Así que, básicamente, dado lo anterior, ¿cuál sería el mejor método de uso en términos de rendimiento sólido y problemas mínimos de subprocesamiento múltiple? ¿O alguien ha tenido alguna experiencia con un bajo rendimiento de cualquiera de los anteriores y me disuadiría de usarlo? Cualquier sugerencia y consejo será recibido con gratitud.

Respuesta

3

Si está preocupado por el rendimiento, en mi experiencia boost :: asio tiende a escalar muy bien, especialmente en grandes proyectos multiproceso. Sin embargo, tenga en cuenta que boost :: asio es una biblioteca orientada a socket de bajo nivel, por lo que tendrá que profundizar bastante en eso; hay algunos buenos ejemplos para HTTPS con boost :: asio, p. this. Rechazaría tu idea de usar el do-it-yourself, porque eso es exactamente lo que boost :: asio ofrece.

Personalmente, aún no he trabajado con libcurl, pero OpenSSL ofrece una API de alto nivel que debe cubrir todo lo que necesita; sin embargo, comprará conveniencia al precio del rendimiento. En la mayoría de los casos, la falta de rendimiento será marginal y, por lo tanto, negligible, pero eso depende de su aplicación.

gSOAP es ideal para las solicitudes SOAP del lado del cliente, pero para ser honesto, la compatibilidad del servidor es bastante mínima, y ​​tendría que hacer muchos ajustes para admitir archivos WSDL múltiples en una aplicación multiproceso. Yo personalmente votaría en contra de hacer eso también.

En conclusión, usaría boost :: asio si quiere maximizar el rendimiento y se siente cómodo con los sockets, y OpenSSL si la conveniencia y el desarrollo rápido tienen una mayor prioridad.

+0

Gracias por esto.Me gusta su respuesta, pero antes de aceptar esperaré y veré si recibo más respuestas. Me alegro de que usted también piense que vale la pena abandonar gSOAP ya que he perdido literalmente horas tratando de configurarlo. – mathematician1975

2

He escrito mi propio cliente utilizando la biblioteca Poco. Contiene todo lo que necesitas para este propósito.

  • Analizadores XML (las API DOM y SAX son compatibles);
  • clientes HTTP y HTTPS.
+0

¿Está disponible gratuitamente o debe comprarlo? – mathematician1975

+0

Hay tres ediciones de la biblioteca Poco. La edición básica y la edición completa se publican bajo [Boost Software License] (http://pocoproject.org/license.html). –

+0

Uso la Edición completa. –

Cuestiones relacionadas