用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

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

被折叠的 条评论
为什么被折叠?



