Qt HTTP服务器?

gre*_*fab 22 qt web-services qt4

我想写一个小的HTTP服务器应用程序,它接收HTTP GET请求,处理它们并发出回复.由于应用程序的历史,我赞成使用Qt,但我能找到的是另一个(更常见的)方向:向服务器发送请求并使用QNetworkAccessManager接收回复.我需要的是一个类似socket的东西,当一个请求进来时,会生成一个对象,我可以在这个对象中选择url等,这样我就可以发出适当的回复.

在Qt框架中,我只是盲目或者不是这样吗?如果是这样,你能推荐替代品吗?

小智 15

QtWebApp是一个HTTP服务器,支持GET和POST方法,cookie,会话和文件上传.使用这个库就像编写Java Servlet一样简单.

项目网站是德语,但可下载的文件都是英文的,包括文档.

  • 不错的,用于webservices:http://stackoverflow.com/questions/11558237/creating-simple-webservice-in-c-qt-acting-as-server-providing-json-data?lq=1 (3认同)

Nat*_*man 14

我刚刚发布了QHttpEngine的第一个版本,旨在填补你所描述的空白.该项目的目标是提供一组非常简单的类,提供与Qt集成的HTTP服务器.

例如,要从应用程序中的资源提供静态文件,您需要做的就是:

QFilesystemHandler handler(":/www");
QHttpServer server(&handler);

server.listen(QHostAddress::LocalHost, 8000);
Run Code Online (Sandbox Code Playgroud)

您还可以创建一个派生类,该类QObject将其插槽公开为HTTP API中的端点.例如:

class ApiHandler : public QObjectHandler
{
    Q_OBJECT

private slots:

    QVariantMap doSomething(const QVariantMap &params) {
        // do something with the parameters and return a response
    }
};
Run Code Online (Sandbox Code Playgroud)

然后,用户可以/doSomething使用编码为JSON的参数发送POST请求,并接收插槽生成的响应.

整个库都有完整的文档,并附带一个相当详尽的测试套件.它是跨平台的,在Linux,Windows和Mac OS X上经过官方测试和支持.至少有一个主要的开源应用程序使用QHttpEngine,NitroShare.


Ana*_*thi 13

我找到了这个https://github.com/vinipsmaker/tufao,这是一个迟到的答案..不确定它是否有帮助.


小智 7

这是一个非常简单的HTTP Web服务器,它将更新每秒的秒数,因为在Web浏览器上建立了连接.它还显示Web浏览器在屏幕上发送的数据.程序设置为使用端口8080,例如127.0.0.1:8080

#-------------- Project file webServer3.pro ------- 
QT       += core
QT       += network
QT       -= gui

TARGET = webServer3
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp

HEADERS += \
myhttpserver.h

/*------------------header file myhttpserver.h --------------*/ 
#ifndef MYHTTPSERVER
#define MYHTTPSERVER
#include <QCoreApplication>
#include <QNetworkInterface>
#include <iostream>
#include <QObject>
#include <QTcpSocket>
#include <QTcpServer>
#include <QDebug>

class myHTTPserver : public QObject
{
    Q_OBJECT
public:
    explicit myHTTPserver(QObject *parent = 0);
    ~myHTTPserver();
    QTcpSocket *socket ;
public slots:
    void myConnection();
private:
    qint64 bytesAvailable() const;
    QTcpServer *server;
signals:
};


/*------------------------main.cpp -------------------------*/
#include "myhttpserver.h"

using namespace std;
void delayms( int millisecondsToWait );

int main(int argc, char *argv[])
    {
    QCoreApplication a(argc, argv);
    myHTTPserver server;
    return a.exec();
}

myHTTPserver::myHTTPserver(QObject *parent) : QObject(parent)
    {
     server = new QTcpServer(this);
    // waiting for the web brower to make contact,this will emit signal
    connect(server, SIGNAL(newConnection()),this, SLOT(myConnection()));
    if(!server->listen(QHostAddress::Any,8080))cout<< "\nWeb server      could not start";
    else cout<<"\nWeb server is waiting for a connection on port 8080";
}

void myHTTPserver::myConnection()
    {
    static qint16 count;  //count number to be displayed on web browser
    socket = server->nextPendingConnection();
    while(!(socket->waitForReadyRead(100)));  //waiting for data to be read from web browser

    char webBrowerRXData[1000];
    int sv=socket->read(webBrowerRXData,1000);
    cout<<"\nreading web browser data=\n";
    for(int i=0;i<sv;i++)cout<<webBrowerRXData[i];
    cout<<"\n";

    socket->write("HTTP/1.1 200 OK\r\n");       // \r needs to be before \n
    socket->write("Content-Type: text/html\r\n");
    socket->write("Connection: close\r\n");
    socket->write("Refresh: 1\r\n\r\n");     //refreshes web browser     every second. Require two \r\n.

    socket->write("<!DOCTYPE html>\r\n");
    socket->write("<html><body>Number of seconds since connected.. ");
    QByteArray str;
    str.setNum(count++);   //convert int to string
    socket->write(str);
    socket->write(" </body>\n</html>\n");

    socket->flush();
    connect(socket, SIGNAL(disconnected()),socket, SLOT(deleteLater()));
    socket->disconnectFromHost();
}

myHTTPserver::~myHTTPserver()
    {
    socket->close();
}
Run Code Online (Sandbox Code Playgroud)


Huy*_*Huy 7

QttpServer = Qt + libuv + REST =您的API服务器

对于需要处理大量并发连接,请求和你有什么的Qt API服务器 ......我们有libuv库.

虽然libuv是为NodeJS构建的,但我们在Qt-land中的粉丝仍然可以从epolls和kqueues中获益,而不是默认的select方法.

有关github的更多信息,请访问https://github.com/supamii/QttpServer