TuFao服务器的安装和搭建

来源:互联网 发布:mac ext4 读写 编辑:程序博客网 时间:2024/05/30 04:30

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_OBJECTpublic:    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");    }}
0 0
原创粉丝点击