TuFao服务器的安装和搭建

    xiaoxiao2021-03-26  9

    TuFao服务器

    tufao是一个由QT编写的HTTP服务器。 tufao代替apache来实现http的通信。

    安装tufao

    获取原代码编译和安装 sudo apt-get install cmake qt-sdk 在tufao目录下创建build目录 cd build cmake .. -DCMAKE_INSTALL_PREFIX=/usr make sudo make install创建工程 创建空的工程 工程文件中增加CONFIG += TUFAO1 C++11 增加一个类MyServer,一定是QObject派生类 增加一个main.cpp实现main函数 在MyServer的构造函数,创建Tufao::HttpServer对象server 将server的信号requestReady和自己写的槽函数slotRequestReady连接 在slotRequestReady函数中,实现http协议的响应报文。 示例如下: MyServerHandlePost.h #ifndef MYSERVERHANDLEPOST_H #define MYSERVERHANDLEPOST_H #include <QObject> #include <Tufao/HttpServer> #include <Tufao/HttpServerRequest> #include <Tufao/HttpServerResponse> using namespace Tufao; class MyServerHandlePost : public QObject { Q_OBJECT public: explicit MyServerHandlePost(QObject *parent = 0); HttpServer* server; void handlePostData(HttpServerRequest&, HttpServerResponse&); signals: public slots: void slotRequestReady(HttpServerRequest&, HttpServerResponse&); }; #endif // MYSERVERHANDLEPOST_H

    MyServerHandlePost.cpp

    #include "MyServerHandlePost.h" #include <QFile> #include <QJsonObject> #include <QJsonValue> #include <QJsonDocument> #include <QJsonArray> MyServerHandlePost::MyServerHandlePost(QObject *parent) : QObject(parent) { server = new HttpServer; if(!server->listen(QHostAddress::Any, 8081)) { qDebug()<<"bind error"; } connect(server, &HttpServer::requestReady, this, &MyServerHandlePost::slotRequestReady); } void MyServerHandlePost::handlePostData(HttpServerRequest &request, HttpServerResponse &response) { // QFile file("/home/xueguoliang/a.txt_upload"); // file.open(QFile::WriteOnly); /* data is {username: "xxx", password: "yyy"} */ QByteArray data = request.readBody(); QJsonDocument doc = QJsonDocument::fromJson(data); QJsonObject root = doc.object(); QString username = root.value("username").toString(); QString password = root.value("password").toString(); if(username == "aaa" && password== "bbb") { // {result: "ok"} root.insert("result", QString("ok")); } else { // {result: "ok"} root.insert("result", QString("err")); root.insert("reason", QString("username or password error")); } { QJsonDocument doc(root); QByteArray buf = doc.toJson(); response.writeHead(HttpResponseStatus::OK); response.end(buf); } // file.write(data); // file.close(); } void MyServerHandlePost::slotRequestReady(HttpServerRequest &request, HttpServerResponse & response) { if(request.method() == "POST") { // connect(&request, &HttpServerRequest::ready, ) // end signal: all data is ready // connect(&request, SIGNAL(end()), this, SLOT(slotDataEnd())); connect(&request, &HttpServerRequest::end, [&](){ handlePostData(request, response); }); } else { response.writeHead(HttpResponseStatus::OK); response.end("i need post method\n"); } }
    转载请注明原文地址: https://ju.6miu.com/read-600009.html

    最新回复(0)