目录概览
设想一下,你的主要业务逻辑都由Qt C++完成,你需要给第三方提供你的业务服务,所以你需要把它们全部封装进一个动态链接库供客户调用;由于业务逻辑的需要或是历史原因,部分服务的接口是Http服务形式提供。客户挂载动态库,只需要一句server start,即可在自己的进程中启动并给他们的客户提供我们开发的服务,同时也可以加入他们自己的服务,并且调用我们提供的其他api接口,这样可以实现一个高度自由的一体化的交付方案。要实现这样的效果,一个解决方案是借助Qt的HttpServer扩展库和QCoreApplication。
编译 QtHttpServer 模块
首先拉取代码
git clone https://github.com/qt-labs/qthttpserver.git
cd qthttpserver
git checkout 5.15
git submodule update --init --recursive
然后用qtcreator打开工程,编译
最简单的Qt代码
如果想构建一个最简单的Qt程序,那么大概就是一个没有UI、控制台下运行的HelloWorld程序,它的代码大概是这个样子:
#include <QtCore>
int main(int argc, char **argv) {
QCoreApplication app(argc, argv);
// qDebug()<<"Hello World";
return app.exec();
}
使用QtHttpServer
QtHttpServer目前不在Qt的主lib中,据说Qt6会正式加入。所以需要自行下载编译。
编译QtHttpServer
我使用的是Qt5,牵出5.15分支,并自己使用QtCreator编译:
git clone https://github.com/qt-labs/qthttpserver.git
git checkout 5.15
编译成功后,将头文件和动态库拷贝到所使用的Qt安装路径下的对应目录内即可。
cd build-qthttpserver-Desktop_Qt_5_12_6_GCC_64bit-Release/
mv ./* /opt/Qt5.12.6/5.12.6/gcc_64/lib/
cd cmake/
mv ./* /opt/Qt5.12.6/5.12.6/gcc_64/lib/cmake/
cd ..
cd pkgconfig/
mv ./* /opt/Qt5.12.6/5.12.6/gcc_64/lib/pkgconfig/
cd ..
cd ..
cd include/
mv ./* /opt/Qt5.12.6/5.12.6/gcc_64/include/
cd ..
cd mkspecs
cd modules
mv ./* /opt/Qt5.12.6/5.12.6/gcc_64/mkspecs/modules/
启动QtHttpServer
在Qt官方blog introducing-qt-http-server,介绍了一个最基本的QHttpServer用法:
#include <QtCore>
#include <QtHttpServer>
int main(int argc, char **argv) {
QCoreApplication app(argc, argv);
QHttpServer httpServer;
httpServer.route("/", []() {
return "Hello world";
});
httpServer.listen(QHostAddress::Any, 9527);
return app.exec();
}