QtWebApp的使用【在Qt中搭建HTTP服务器】(一)

本文详细介绍如何使用QtWebApp库在C++中构建HTTPWeb服务器,包括安装配置、输出HelloWorld、动态HTML生成及请求映射器的使用。

用Qt和QtWebApp能够实现在C++中开发HTTP Web服务器应用程序。

首先,需要先安装Qt的软件开发工具包。点此下载

其次,下载最新的QtWebApp库。点此下载

下载并解压缩QtWebApp ZIP文件。你将会看到:

在这里插入图片描述

如何使用QtWebApp

1)将QtWebApp.zip文件解压到文件夹中,并创建一个名为“ MyFirstWebApp”的新Qt控制台项目。然后,建立如下文件结构:

在这里插入图片描述
2)将以下行添加到MyFirstWebApp项目的项目文件中:

QT += network
include(…/QtWebApp/QtWebApp/httpserver/httpserver.pri)

在这里插入图片描述
3)启动QT Creator IDE,然后打开项目文件Demo1 / Demo1.pro。

4)下一步是创建配置文件MyFirstWebApp / etc / webapp1.ini。这步需要使用操作系统的文件管理器来执行此操作,因为Qt Creator无法创建新文件夹。文件内容为:

[listener]
;host=192.168.0.100
port=8080
minThreads=4
maxThreads=100
cleanupInterval=60000
readTimeout=60000
maxRequestSize=16000
maxMultiPartSize=10000000
  • host 和 port 参数指定Web服务器在哪个IP地址和端口上侦听。如果注释掉主机(如上所述),则服务器将侦听所有网络接口。公用Web服务器使用端口80,而内部Web服务器通常在端口8080上侦听。你可以使用任何喜欢的空闲端口。

  • QtWebApp可以同时处理多个HTTP请求,因此它是多线程的。由于启动新线程需要花费大量时间,因此QtWebApp会将线程重新用于后续的HTTP请求。

  • maxThreads值指定并发工作线程的最大数量。在进入生产环境之前,应该使用负载生成器工具来查找服务器可以处理多少负载,而不会耗尽内存或变慢。

  • Web服务器始终以空线程池开头。当HTTP请求进入时,将根据需要创建线程。空闲线程由计时器缓慢关闭。每隔一个cleanupInterval时间间隔(以毫秒为单位),服务器都将关闭一个空闲线程。但是minThreads 个线程始终保持运行状态。

  • 使用给定的值,服务器最多可以处理100个并发HTTP连接。它使4个空闲的工作线程保持运行状态,以确保一段时间不活动后的良好响应时间。

  • readTimeout设置通过打开大量连接而不使用它们,来保护服务器免受简单的拒绝服务攻击。静默连接将在设定的毫秒数后被关闭。通常情况下,是由Web浏览器来关闭连接。

  • maxRequestSize保护服务器免受非常多的HTTP请求而导致内存过载的影响。此值适用于常规请求。另一个maxMultiPartSize值适用于网络浏览器将文件上传到服务器时发生的大部分请求。如果要接受10 MB的文件,由于HTTP协议开销,必须将此值设置得更大一些。

  • 文件上传存储在临时文件中。临时文件的位置由操作系统定义。

5)让我们继续创建我们的第一个Web应用程序。要使此配置文件在Qt Creator中可见,请在项目文件中添加一行:

OTHER_FILES + = etc / webapp1.ini

6)现在,我们添加一些代码来加载该文件:

#include <QCoreApplication>
#include <QSettings>

int main(int argc, char *argv[])
{
   
   
    QCoreApplication app(argc, argv);
    QSettings* listenerSettings=
         new QSettings("../MyFirstWebApp/etc/webapp1.ini",QSettings::IniFormat,&app);
    qDebug("config file loaded");
    return app.exec();
}

运行该程序来检查是否可以加载配置文件。你可能需要修改上面的路径,使其与你的个人计算机设置相匹配。

如果在目标计算机上运行程序,则配置文件可能位于其他位置。因此,最好在几个文件夹中自动搜索它:

#include <QCoreApplication>
#include <QSettings>
#include <QFile>
#include <QDir>
#include <QString>

/**
 * Search the configuration file.
 * Aborts the application if not found.
 * @return The valid filename
 */
//该方法用来搜索配置文件
QString searchConfigFile() {
   
   
    QString binDir=QCoreApplication::applicationDirPath();
    QString appName=QCoreApplication::applicationName();
    QFile file;
    file.setFileName(binDir+"/webapp1.ini"); 
    if (!file.exists()) {
   
   
        file.setFileName(binDir+"/etc/webapp1.ini");
        if (!file.exists()) {
   
   
            file.setFileName(binDir+"/../etc/webapp1.ini");
            if (!file.exists()) {
   
   
                file.setFileName(binDir+"/../"+appName+"/etc/webapp1.ini"); 
                if (!file.exists()) {
   
   
                    file.setFileName(binDir+"/../../"+appName+"/etc/webapp1.ini"); 
                    if (!file.exists()) {
   
   
                        file
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值