2012-07-19 53 views
16

Necesito crear un servicio web simple (siendo el "servidor"). El objetivo es proporcionar algunos datos que leo en una aplicación Qt/C++ como datos JSON. Básicamente, una aplicación de JavaScript en el navegador deberá leer sus datos de la aplicación Qt. Por lo general, es un escenario de usuario único, por lo que el usuario ejecuta una aplicación de Google Maps en su navegador, mientras que los datos adicionales provienen de la aplicación Qt.Creando un Servicio Web simple en C++/Qt (actuando como servidor) proporcionando datos JSON

Hasta ahora he encontrado estas librerías:

  1. QXT: http://libqxt.bitbucket.org/doc/0.6/index.html sino siendo un novato en C++/Qt Echo de menos algunos ejemplos. Añadido: He encontrado un ejemplo here
  2. gSOAP: http://www.cs.fsu.edu/~engelen/soap.html tiene más ejemplos y documentación y también parece apoyar JSON
  3. KD SOAP: http://www.kdab.com/kdab-products/kd-soap/ con ningún ejemplo en lo que puedo decir, docu es here
  4. características de Qt en sí, pero es más acerca de actuar como un cliente: http://qt-project.org/videos/watch/qt-networking-web-services

de banco así me da básicamente los enlaces a las librerías anteriores

  1. webservice with Qt con un ejemplo que realmente no entiendo.
  2. How to Create a webservice by Qt

Así que básicamente tienen los siguientes preguntas:

  1. Qué lib usaría? Quiero mantenerlo lo más simple posible y necesitaría un ejemplo.
  2. ¿Hay otra forma (fácil) de proporcionar los datos JSON a la página web de JavaScript además del servicio web?

- Editar, Observaciones: ---

necesita ser intrínseca aplicación. No se puede instalar ningún servidor web, no se puede usar tiempo de ejecución adicional. El usuario solo ejecuta la aplicación. Tal vez el Qt WebKit podría ser un enfoque ....

- Edición 2 -

Actualmente la comprobación de los pequeños servidores web como de SO "Qt HTTP Server?"

+1

¿Por qué no crearlo como un programa CGI llamado por un servidor web existente? Es probablemente mucho más simple. –

+0

Porque es básicamente un escenario de escritorio. Los datos residen solo en la PC del usuario y no es posible instalar un servidor web en la PC de cada usuario. La aplicación web solo se usa porque presenta Google Maps. –

+1

¿Ha considerado [Jetty] (http://jetty.codehaus.org/jetty/)? IIRC no necesita instalación y solo necesita Java. –

Respuesta

14

A partir de mis pruebas, Actualmente estoy utilizando QtWebApp: http://stefanfrings.de/qtwebapp/index-en.html Esta es una de las respuestas de Editar 2 (Qt HTTP Server?) pequeña WebServer

de Stefan tiene un código bien documentado, que está escrito en "Qt C++" y fácil de usar, especialmente si usted ha trabajado con los servlets ya. Dado que se puede integrar fácilmente en mi proyecto de Qt, terminaré con un servidor web interno.

Algunos códigos de demostración de mis pruebas JSON, que muestran que generar el contenido JSON es básicamente crear un QString.

void WebServiceController::service(HttpRequest& request, HttpResponse& response) { 
// set some headers 
response.setHeader("Content-Type", "application/json; charset=ISO-8859-1"); 
response.setCookie(HttpCookie("wsTest","CreateDummyPerson",600)); 

QString dp = WebServiceController::getDummyPerson(); 
QByteArray ba = dp.toLocal8Bit(); 
const char *baChar = ba.data(); 
response.write(ba); 
} 

Si alguien tiene ejemplos fáciles con otras librerías para compartir, hágamelo saber.

+1

¿Hay alguna evolución de este proyecto? –

+0

Gracias por el enlace a http://stefanfrings.de/qtwebapp/index-en.html. Pasé un poco más o menos leyendo los documentos. Se ve bien. Debería estar en github – iep

2
QByteArray ba = dp.toLocal8Bit(); 
const char *baChar = ba.data(); 

No necesita convertir el QByteArray a la matriz de caracteres. Response.write() también se puede llamar con un QByteArray.

Por cierto: qPrintable(dp) es un atajo para convertir de QString a la matriz de caracteres.

Cuestiones relacionadas