返回

文章详情

Vermell – 最小的,无依赖的 C++ Web 框架,使用 epoll

Hacker News2026年9月1日 04:56

一个为现代 C++ 环境设计的最小、零膨胀的 Web 框架。快速、结构化且严格类型化。Vermell 是一个针对现代 C++ 环境的 Web 框架:一个头文件可包含,一个静态库可链接,别无他需。没有运行时,没有垃圾回收,没有框架特定的 DSL,没有供应的依赖项——你所写的就是 C++,运行的也是 C++。其背后是一个事件驱动引擎:一个非阻塞的 epoll 循环读取请求,并将工作交给工作线程池。这种分离让 Vermell 在负载下快速并能抵御慢客户端。零依赖——仅使用基础 Linux API(套接字、epoll、pthread、fork/exec)。构建只需一条命令——g++ -std=c++20 server.cpp -o exe -lvermell。支持任何带有 g++ 的 Linux——x86_64、ARM(aarch64、armv7)、通过 Termux 的 Android、WSL、树莓派、容器。默认情况下加固——超时、请求限制、连接限制和渲染监狱开箱即用。在树中的 JSON DOM——严格遵循 RFC 8259 的解析器和序列化器、类型化参数、原始主体、多部分上传。C++ 模板——compose() 模块和 render() 变量。流畅的配置——一个 configure({...}) 调用或可链式设置器,在运行时可读。📚 完整文档:vermell.cc——双语(EN/ES)手册,涵盖本 README 的每个部分,并附有示例和图解。目录 安装 CMake npx Docker 快速入门 编译 路由与处理程序 Lambda 捕获 服务器配置 MIME 类型和文件渲染 静态目录 模板:compose 和 render 渲染 安全 进程和环境 示例 支持 测试 贡献 许可 安装 CMake $ git clone https://github.com/vermellcc/vermell.git $ cd Vermell $ cmake . $ cmake --build . $ make install npx 准备使用的脚手架:$ npx create-vermell-static Docker $ docker pull vermellcc/vermell APT(Debian/Ubuntu)的 amd64、arm64 和 armhf 包在 GitHub Pages 上,已签名并准备添加:$ sudo install -d -m 0755 /etc/apt/keyrings $ curl -fsSL https://vermellcc.github.io/vermell/vermell-apt-key.asc | sudo gpg --dearmor --yes -o /etc/apt/keyrings/vermell.gpg $ echo " deb [signed-by=/etc/apt/keyrings/vermell.gpg] https://vermellcc.github.io/vermell stable main " | sudo tee /etc/apt/sources.list.d/vermell.list $ sudo apt-get update $ sudo apt-get install -y libvermell 密钥指纹:022D 56AA 7A6B 2028 B005 3629 F616 54D8 8AD1 C323 快速入门 Vermell 服务器是一个路由器:注册一个路由的处理程序,选择一个端口,然后调用 listen()。 # include < vermell/vermell.h > int main () { Router router; router.setPort(8080); router.get("/", { [](Query &http) { http.send(" Hello from Vermell "); }}); router.listen(); } 处理程序周围的 { ... } 非常重要。router.get(...) 的第二个参数是 MiddlewareList,因此处理程序总是作为括号列表传递:router.get("/", { [](Query &http) { ... } })。 编译并运行:$ g++ -std=c++20 server.cpp -o exe -lvermell $ ./exe 然后将浏览器或 curl 指向它:$ curl http://localhost:8080/ Hello from Vermell router.listen() 将阻塞并一直提供服务。listenOne() 提供单个请求并返回——适合测试和一次性服务器。 编译 一次 g++ 调用编译并链接所有内容——没有额外的标志,没有链接顺序游戏:$ g++ -std=c++20 server.cpp -o exe -lvermell 对于较大的项目,请使用 CMake,但服务器始终只需一条命令。 可移植性。Vermell 没有依赖项,因此任何派生自 Linux 并具有 C++20 g++ 的系统都可以构建它:x86_64、ARM(aarch64、armv7)、通过 Termux 的 Android、WSL、树莓派、容器。macOS 和 Windows 不支持(epoll)。 没有 root?没问题。在 Termux(或任何没有 root 权限的系统)上,你无法安装到 /usr/local。通过相对路径包含头文件(#include "../include/vermell/vermell.h")并直接链接静态库——将 libvermell.a 复制到你的源代码旁边,并使用 -L。-lvermell: // Termux / 无 root 构建:通过相对路径引用的头文件 #include "../include/vermell/vermell.h" int main () { Router router; router.setPort(8080); router.get("/", { [](Query &http) { http.send(" hi from termux "); }}); router.listen(); } $ cp libvermell.a . # 静态库在源代码旁边 $ g++ -std=c++20 server.cpp -o exe -L. -lvermell $ ./exe 路由与处理程序 路由器为每个 HTTP 动词暴露一个注册方法。静态路由通过透明哈希路由图以 O(1) 的速度分发。 router.get("/users", { [](Query &web) { web.send(" list "); }}); router.post("/users", { [](Query &web) { web.send(" create "); }}); router.put("/users/:id", { [](Query &web) { web.send(" update "); }}); router.deleteX("/users/:id", { [](Query &web) { web.send(" delete "); }}); router.patch("/users/:id", { [](Query &web) { web.send(" patch "); }}); router.head("/status", { [](Query &web) { web.send(" head "); }}); router.options("/ping", { [](Query &web) { web.send(" options "); }}

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡