在提供 JSON 数据的 C++/Qt(充当服务器)中创建简单的 WebService
Posted
技术标签:
【中文标题】在提供 JSON 数据的 C++/Qt(充当服务器)中创建简单的 WebService【英文标题】:Creating simple WebService in C++ / Qt (acting as server) providing JSON data 【发布时间】:2012-07-19 09:53:30 【问题描述】:我需要创建一个简单的网络服务(作为“服务器”)。目标是提供一些我在 Qt / C++ 应用程序中读取的数据作为JSON 数据。基本上,浏览器中的 javascript 应用程序应从 Qt 应用程序中读取其数据。它通常是单用户场景,因此用户在她的浏览器中运行 Google Maps 应用程序,而其他数据来自 Qt 应用程序。
到目前为止,我已经找到了这些库:
-
Qxt: http://libqxt.bitbucket.org/doc/0.6/index.html 但作为 C++/Qt 的新手,我错过了一些例子。补充:我找到了一个例子here
gSoap:http://www.cs.fsu.edu/~engelen/soap.html 有更多示例和文档,而且似乎也支持 JSON
KD SOAP: http://www.kdab.com/kdab-products/kd-soap/ 据我所知没有例子,文档是 here
Qt 有自己的特色,但更多的是充当客户端:http://qt-project.org/videos/watch/qt-networking-web-services
检查 SO 基本上为我提供了上述库的链接
-
webservice with Qt 举个我不太明白的例子。
How to Create a webservice by Qt
所以基本上我确实有以下问题:
-
您将使用哪个库?我想让它尽可能简单,并且需要一个示例。
除了 WebService 之外,还有其他(简单!)方法可以将 JSON 数据提供给 JavaScript 网页吗?
-- 编辑,备注:---
需要是应用程序固有的。不能安装 Web 服务器,也不能使用额外的运行时间。用户只需运行应用程序。也许 Qt WebKit 可能是一种方法....
-- 编辑2--
目前正在检查小型 Web 服务器,截至 SO“Qt HTTP Server?”
【问题讨论】:
为什么不将其创建为由现有 Web 服务器调用的 CGI 程序?这可能要简单得多。 因为它基本上是桌面场景。数据仅驻留在用户的 PC 上,不可能在每个用户的 PC 上安装 Web 服务器。使用 WebApp 只是因为它具有 Google 地图。 你考虑过Jetty吗? IIRC 不需要安装,只需要 Java。 特别不是 Jetty,而是使用 Web 服务器的方法。应用程序本身需要提供它,没有额外的安装是可行的,需要在没有 Java 的情况下运行。感谢您的提示! 更新:gSOAP 有一个更新的 JSON 引擎和一个新的 jsoncpp 代码生成器,可以在 C++(和 C)中使用 really easy to write JSON code 并部署为服务。 【参考方案1】:在我的测试中,目前我正在使用 QtWebApp:http://stefanfrings.de/qtwebapp/index-en.html 这是编辑 2 的答案之一(Qt HTTP Server?)
Stefan 的小型 WebServer 有一些记录良好的代码,用“Qt C++”编写并且易于使用,特别是如果您已经使用过 servlet。因为它可以很容易地集成到我的 Qt 项目中,所以我最终会使用一个内部 WebServer。
我的 JSON 测试中的一些演示代码,表明生成 JSON 内容基本上是创建一个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);
如果有人有其他库的简单示例可以分享,请告诉我。
【讨论】:
这个项目有什么演变吗? 感谢stefanfrings.de/qtwebapp/index-en.html 的链接。我花了大约一小时阅读文档。看起来挺好的。应该在github上?【参考方案2】:QByteArray ba = dp.toLocal8Bit();
const char *baChar = ba.data();
您不需要将 QByteArray
转换为 char 数组。 Response.write()
也可以用QByteArray
调用。
顺便说一句:qPrintable(dp)
是从QString
转换为字符数组的快捷方式。
【讨论】:
以上是关于在提供 JSON 数据的 C++/Qt(充当服务器)中创建简单的 WebService的主要内容,如果未能解决你的问题,请参考以下文章
Qt浅译:JSON Support in Qt(JSON只有六种数据类型)