QtWebApp HTTP server in C++

QtWebApp C++ HTTP 服务器​

QtWebApp 是一个用 C++ 编写的 HTTP 服务器库,其设计灵感来源于 Java Servlets。它支持 Linux、Windows、Mac OS 以及 Qt 框架所兼容的其他许多操作系统。

Servlet 简介 | 菜鸟教程 (runoob.com)

QtWebApp 包含以下组件:

HTTP(S) 1.0 和 1.1 服务器

模板引擎

缓冲日志记录器


These components can be used independently of each other. A very small usage example:

这些组件可以彼此独立地被使用。一个非常小的用法示例:

// The main program starts the HTTP server
// 主程序开启HTTP服务器
int main(int argc,char *argv[]) {
    QCoreApplication app(argc,argv);
        
    // Settings can also be loaded from a file
    // 设置也可以从文件中加载
    QSettings* settings=new QSettings(&app);
    settings->setValue("port","8080");
    settings->setValue("maxThreads","100");
            
    // Start the webserver
    // 开启网络服务器
    new HttpListener(settings,new MyRequestHandler(&app),&app);

    return app.exec();
}


// The request handler receives and responds HTTP requests
// 响应句柄接收和响应HTTP请求
void MyRequestHandler::service(HttpRequest& request,HttpResponse& response) {
    // Get a request parameters
    // 获取请求的参数
    QByteArray username=request.getParameter("username");

    // Set a response header
    // 设置响应头
    response.setHeader("Content-Type","text/html");

    // Generate the HTML document
    // 生成HTML文档
    response.write("<html><body>");
    response.write("Hello ");
    response.write(username);
    response.write("</body></html>");
}

qualify : (使)有权去做;取得资格

brew : 酿(啤酒)

Overview – MashBerry – Sebastian Düll (sebastian-duell.de)

关于内存需求与适用场景:​

2MB 的小内存占用使得该网络服务器非常适合用于嵌入式系统,例如 Sebastian Düll 的啤酒酿造机。但同时,它也有足够的性能来应对大型网络服务

​关于日志记录器的特点:​

该日志记录器通过将调试信息保留在内存中(直到发生错误时才写入磁盘),从而提升了磁盘空间利用率和运行性能。只要一切运行正常,就不会有任何调试信息被写入磁盘。对日志记录器配置的更改会自动生效,无需重启程序。

​关于资源与许可:​

源代码

教程:

Writing web server applications with QtWebApp

API文档:

QtWebApp: QtWebApp

该库可在 Qt 4.7 至 6.x 版本上运行。若使用 Qt 6,您需要安装 Qt5Compat 库。该库包含了对许多 8 位字符编码的支持,这些编码 Qt6 默认已不再支持。您可以在 LGPL 许可协议 的条件下使用此软件。


起源​

许多年前,一位经验非常丰富的 Java 开发者坚持认为 Java 才是互联网语言,因为用其他编程语言进行网络通信要复杂得多。我们发起了一项挑战来验证这一点。任务是:

● 仅使用 Java 6 运行时库 对比 使用 Qt 4,来编程实现一个具有某些基本功能的 HTTP 服务器。

经过一个周末,我们俩展示了各自目前的成果。两个程序非常相似,因此他承认自己错了。顺便提一句,Qt/C++ 程序比他的 Java 版本要小得多,并且也快一些。几年后,我基于那个原型制作了一个库,并在一些私人项目中使用了它。同事们鼓励我发布代码。自那以后,我自己不再使用这个项目了,但为了让大家用得好,我还是做了一些改进。

感谢

该库当前的高质量是许多人协作的成果。我要感谢各位在真实生产环境中对 QtWebApp 进行的广泛测试,从而为改进做出了贡献。


此页面的德语版本​​。


最后更新​


iterate : 迭代

connection handler pool : 连接处理池

seldom : 不常,很少

corrupted : 崩溃的

​1.9.1 2024年11月14日​

改善连接处理池迭代时的性能和内存使用。

修复了连接处理池中一个罕见的竞态条件问题(malloc(): 损坏的未排序双向链表)。


not ... anymore : 不再

Chunked : 将……分成数份

​1.9.0 2023年9月7日​

部分方法现返回常量引用(const references)以略微提升性能。

若已知内容长度,则不再使用分块传输。


malformed : 畸形的,难看的

​1.8.8 2023年1月24日​

当请求首行格式错误时返回更合适的HTTP状态码(400 错误请求)。

出错后连接关闭更迅速。


load : 负载,重荷

​1.8.7 2023年1月23日​

修复接收到损坏的HTTP请求后可能出现的CPU高占用无限循环问题。


declare : 声明

​1.8.6 2022年9月30日​

修复Windows下的编译错误:未声明 sslCaCertFileName。


peer : 对等

​1.8.5 2022年3月19日​

新增支持SSL对等验证和CA证书。


​1.8.4 2021年10月29日​

为静态文件控制器添加Content-Length头部。


​1.8.3 2021年3月21日​

现在可使用字符串配置日志记录的最低级别(minLevel)。

信息(Info)消息的级别现在位于调试(DEBUG)和警告(WARNING)之间。

新增了HTTP基本认证的示例。


这个软件应该是德国人写出来的。因为原文有德语。


我的人生还挺长的,可以选择做一些自己觉得有趣的事情,做一些自己想做的事情。


Willkommen bei Stefan Frings

这是对图片中德语内容的中文翻译:


​欢迎来到 Stefan Frings 的主页​​​

此网站内容并不反映我的专业能力。这里所涉及的都是我的个人爱好。目前最受欢迎的主题是:

​ESP8266 和 ESP8285 WLAN 模块​

​STM32 教程​

​晶体管​

​QtWebApp HTTP 服务器​

​使用 Qt 学习编程​

在完成 I/O 接口模块(项目)后,我已对其文档进行了最后一次修订。如果有人还需要这个项目,现在正是归档这些页面的好时机。


可以先使用Google翻译,把德语翻译成英语,然后再把英语翻译为中文。


Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐