C++ Web 框架 Crow 快速体验

举报
jackwangcumt 发表于 2022/07/06 09:15:23 2022/07/06
【摘要】 C++语言在多种领域中都被广泛应用,其中大多数偏重于底层框架的实现。C++在Web领域不断可以构建Web Server服务器,还可以构建Web应用。经过对比分析,觉得在C++语言构建的Web框架Crow是非常好用的,他是与Python Web轻量级框架Flask类似,这也是这个Web框架这么被关注的原因之一

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);
下面是官方的介绍截图:

000.jpg

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();
}

    成功运行,则界面如下所示:

03.jpg

02.jpg

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。