C++ Web 框架 Crow 快速体验
1 Web 框架 Crow概述
C++语言在多种领域中都被广泛应用,其中大多数偏重于底层框架的实现。C++在Web领域不断可以构建Web Server服务器,还可以构建Web应用。经过对比分析,觉得在C++语言构建的Web框架Crow是非常好用的,他是与Python Web轻量级框架Flask类似,这也是这个Web框架这么被关注的原因之一。官方地址为:
https://crowcpp.org ,并给出的定义为: A Fast and Easy to use microframework for the web 。Crow框架具备多种优秀的特征:
(01)功能强大,API实现非常简洁;
(02)JSON支持,可以非常方便的处理Web数据交互;
(03)Websocket 支持;
(04)性能卓越;
(05)集成简单,可以快速体验;
(06)安全性,支持SSL(HTTPS);
下面是官方的介绍截图:
2 Web 框架 Crow 安装
Web框架Crow支持多种操作系统,如Linux , MacOS 和 Windows 。运行此框架的软件层面的前提条件如下所示:
C++ compiler with at least C++11 support.
Asio development headers (1.10.9 or later).
(optional) ZLib for HTTP Compression.
(optional) OpenSSL for HTTPS support.
(optional) CMake for building tests, examples, and/or installing Crow.
(optional) Python3 to build tests and/or examples.
而官方介绍的安装方式也是不止一种,可以基于包管理进行安装,也可以基于源码进行编译安装。下面以Linux 操作系统为例,用包管理器进行安装此框架。参考的文档为 : https://crowcpp.org/master/getting_started/setup/linux/
首先在Ubuntu操作系统的特定目录下,运行如下命令下载.deb安装包:
wget https://github.com/CrowCpp/Crow/releases/download/v1.0%2B4/crow-v1.0+4.deb
sudo dpkg -i crow-v1.0+4.deb
下面我们创建一个web目录作为应用的根目录,然后切换到web目录中进行Crow框架集成,C++的外部框架库集成,一方面需要集成头文件,另一方面,需要能找到框架的相关库文件。 Crow框架集成分为系统全局集成和项目级的集成。
Crow系统全局集成主要就是将框架的include目录下的头文件拷贝到 /usr/local/include下,而lib目录下的库文件拷贝到 /usr/local/lib目录下。这样多个C++应用都可以从系统默认的目录中进行头文件和库的加载。而项目级只需要将include目录下的头文件拷贝到当前项目的include目录下即可。
注意: Crow框架还提供一个将所有头文件打包成一个单一头文件crow_all.h ,这个虽然可以更方便的引入,但是一般只用于简单的项目体验,生产环境不建议使用。
基于上述的集成规则,下面支持如下操作:
mkdir web
cd web
ls
wget https://github.com/CrowCpp/Crow/releases/download/v1.0%2B4/crow_all.h
ls
#下载项目源码,获取头文件
wget https://github.com/CrowCpp/Crow/archive/refs/tags/v1.0+4.zip
ls
unzip v1.0+4.zip
ls
ls /usr/local/include
ls Crow-1.0-4/
ls Crow-1.0-4/include/
# 系统集成
cp -r Crow-1.0-4/include/* /usr/local/include/
#项目集成
mkdir include
ls
cp -r Crow-1.0-4/include/* ./include/
ls ./include/
此时,我们可以查看一下 /usr/local/include/ 系统目录的文件,示意如下所示:
# apt install tree
root@kta45j5cyt1qq30:/home/mysoft/web# tree /usr/local/include/
/usr/local/include/
├── crow
│ ├── app.h
│ ├── ci_map.h
│ ├── common.h
│ ├── compression.h
│ ├── http_connection.h
│ ├── http_parser_merged.h
│ ├── http_request.h
│ ├── http_response.h
│ ├── http_server.h
│ ├── json.h
│ ├── logging.h
│ ├── middleware_context.h
│ ├── middleware.h
│ ├── middlewares
│ │ ├── cookie_parser.h
│ │ ├── cors.h
│ │ └── utf-8.h
│ ├── mime_types.h
│ ├── multipart.h
│ ├── mustache.h
│ ├── parser.h
│ ├── query_string.h
│ ├── returnable.h
│ ├── routing.h
│ ├── settings.h
│ ├── socket_adaptors.h
│ ├── task_timer.h
│ ├── TinySHA1.hpp
│ ├── utility.h
│ ├── version.h
│ └── websocket.h
└── crow.h
2 directories, 31 files
3 Crow Hello World
Web项目搭建完成后,下面创建一个main2.cpp(文件名可以随意)文件,作为快速体验的内容,这里就一个.cpp文件来提供Web服务,并建立index.html来构建web页面,具体操作如下所示:
#存放js,css等静态文件
mkdir static
# html模板文件
mkdir templates
cd templates/
vi index.html
cd ..
#web 入口文件
vi main2.cpp
#安装boost依赖库
apt-get install libboost-all-dev
#编译
g++ main2.cpp -o main2 -lboost_system -lboost_filesystem -lpthread
#运行
./main2
其中的index.html内容如下所示:
<!DOCTYPE html>
<html>
<body>
<p>Hello {{user}}</p>
</body>
</html>
而main2.cpp内容如下所示:
#include "crow.h"
//#include "crow_all.h"
int main()
{
crow::SimpleApp app;
CROW_ROUTE(app, "/<string>")([](std::string name){
//index.html in templates folder
auto page = crow::mustache::load("index.html");
// pass value to index.html
crow::mustache::context ctx ({{"user", name}});
//render page
return page.render(ctx);
});
// http://localhost:18080/jack for test
app.port(18080).multithreaded().run();
}
成功运行,则界面如下所示:
- 点赞
- 收藏
- 关注作者
评论(0)