QHttpServer 类

QHttpServer 是 QAbstractHttpServer 和 QHttpServerRouter 的简化 API。更多信息...

头文件 #include <QHttpServer>
CMakefind_package(Qt6 REQUIRED COMPONENTS HttpServer)
target_link_libraries(mytarget PRIVATE Qt6::HttpServer)
qmakeQT += httpserver
Qt 6.4
继承 QAbstractHttpServer
状态技术预览

公共类型

公共函数

QHttpServer(QObject *parent = nullptr)
virtual~QHttpServer()
voidafterRequest(ViewHandler &&viewHandler)
boolroute(Args &&... args)
QHttpServerRouter *router()
voidsetMissingHandler(QHttpServer::MissingHandler handler)

详细描述

QHttpServer server;

server.route("/", [] () {
    return "hello world";
});
server.listen();

成员类型文档

[alias] QHttpServer::MissingHandler

类型别名,代表 std::function<void(const QHttpServerRequest &request, QHttpServerResponder &responder)>.

成员函数文档

[explicit] QHttpServer::QHttpServer(QObject *parent = nullptr)

使用父对象 parent 创建 QHttpServer 的一个实例。

[virtual noexcept] QHttpServer::~QHttpServer()

销毁 QHttpServer。

template <typename ViewHandler> void QHttpServer::afterRequest(ViewHandler &&viewHandler)

注册在每个请求之后运行的函数。

viewHandler 参数可以是一个函数指针、不可变的 lambda,或者任何具有 const 调用操作符的其他可复制可调用对象。该可调用对象可以接受一个或两个可选参数:QHttpServerResponse &responder 和 const QHttpServerRequest& request。如果两者都给出,它们可以以任何顺序出现。

示例

QHttpServer server;

// Valid:
server.afterRequest([] (QHttpServerResponse &&resp, const QHttpServerRequest &request) {
    return std::move(resp);
}
server.afterRequest([] (const QHttpServerRequest &request, QHttpServerResponse &&resp) {
    return std::move(resp);
}
server.afterRequest([] (QHttpServerResponse &&resp) { return std::move(resp); }

// Invalid (compile time error):
// resp must be passed by universal reference
server.afterRequest([] (QHttpServerResponse &resp, const QHttpServerRequest &request) {
    return std::move(resp);
}
// request must be passed by const reference
server.afterRequest([] (QHttpServerResponse &&resp, QHttpServerRequest &request) {
    return std::move(resp);
}

模板 <typename Rule = QHttpServerRouterRule, typename... Args> bool QHttpServer::route(Args &&... args)

此函数仅用作简化路由API的包装器。

此函数接受可变数量参数 args。最后一个参数是一个回调函数(ViewHandler)。剩余参数用于创建一个新的 Rule(默认为 QHttpServerRouterRule)。然后这个规则会添加到 QHttpServerRouter 中。如果创建了一个新的规则,则返回 true,否则返回 false

ViewHandler 可以是函数指针、非可变的 lambda 或任何具有 const 调用运算符的可拷贝的可调用对象。可调用对象可以接受两个可选的特殊参数:const QHttpServerRequest&QHttpServerResponder&&。这些特殊参数必须是参数列表中的最后一个,但顺序可以任意,可以有零个、一个或两个。只有返回类型为 void 的处理器才能接受 QHttpServerResponder&& 参数。

示例

QHttpServer server;

// Valid:
server.route("test", [] (const int page) { return ""; });
server.route("test", [] (const int page, const QHttpServerRequest &request) { return ""; });
server.route("test", [] (QHttpServerResponder &&responder) { return ""; });

// Invalid (compile time error):
server.route("test", [] (const QHttpServerRequest &request, const int page) { return ""; }); // request must be last
server.route("test", [] (QHttpServerRequest &request) { return ""; });      // request must be passed by const reference
server.route("test", [] (QHttpServerResponder &responder) { return ""; });  // responder must be passed by universal reference

默认情况下,请求在 QHttpServer 的线程中按顺序处理。如果需要异步处理,请求处理器可以返回 QFuture<QHttpServerResponse>

server.route("/feature/", [] (int id) {
    return QtConcurrent::run([] () {
        return QHttpServerResponse("the future is coming");
    });
});

QFuture 的主体异步执行,但所有网络通信都是按顺序执行的。对于返回 QFuture 的路由,没有可用的特殊参数 QHttpServerResponder&&

另请参阅QHttpServerRouter::addRule

QHttpServerRouter *QHttpServer::router()

返回路由对象。

void QHttpServer::setMissingHandler(QHttpServer::MissingHandler handler)

为未处理的路径设置处理器。

作为 handler 传递的可调用对象将为每个无法由任何注册的路由处理器处理的请求调用。传递默认构造的 std::function 将处理器重置为默认的,该处理器返回状态为 404 Not Found 的回复。

© 2024 Qt 公司有限公司。此处包含的文档贡献是各自所有者的版权。此处提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款许可的。Qt 和相应的标志是芬兰和其他国家/地区的 Qt 公司的商标。所有其他商标均为其各自所有者的财产。