2 Star 13 Fork 7

Asciphx / Crow

加入 Gitee
与超过 1000 万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README-zh_CN.md

乌鸦标志

乌鸦是Web的C++微服务框架,支持mac,linux,windows,三大平台,开发速度最快最迅速最猛烈,下一步即将支持ORM。目前估测能在techempower应该可以排到世界前五。

示例(example_vs)🚀

(灵感来自 Python Flask)[由Asciphx提供的分支]

Travis Build Coverage Status

#include "cc.h"
int main(){
    cc::SimpleApp app;
    app["/"]([](){
        return u8"你好 世界!";
    });
    app.port(18080).multithreaded().run();
}

特点

  • 简易路由,类似于Python Flask
  • 类型安全处理程序(参见示例),非常快 基准结果
  • 更多关于[crow benchmark]的数据(https://github.com/ipkn/crow-benchmark)
  • 第三方JSON解析器Nlohmann json用于静态反射,输出json。
  • Mustache基于模板库(crow::mustache)
  • 中间件支持,Websocket支持
  • 支持静态资源,并且默认在'static/'目录
  • 模块化开发,效率非常高,代码极简

仍在开发中

-内置ORM -检查sqlpp11如果你想要的话。

  • 现在允许在'config.h'专门配置CORS

示例

上传文件

  app.post("/upload")([](cc::Req& req) {
	  cc::Parser<2048> msg(req);
	  json j = json::object();
	  for (auto p : msg.params) {
	    if (!p.size) j[p.key] = p.value; else j[p.key] = p.filename;
	  }
	  return j;
	});

sql查询

  app["/sql"]([] {
	auto q = d.conn();
	//std::tuple<int, std::string> ds=q("select id,name from users_test where id = 1").template r__<int,std::string>();
	//std::cout<<std::get<0>(ds)<<std::get<1>(ds);
	int i = 0; q("SELECT 200+2").r__(i);
	std::string s; q(u8"SELECT '你好 世界!'").r__(s);
	return Res(i,s);
  });

静态反射

  app["/list"]([]() {
	User u; List list{ &u }; json::parse(list, R"({"user":{"is":false,"age":25,"weight":50.6,"name":"deaod"},
	  "userList":[{"is":true,"weight":52.0,"age":23,"state":true,"name":"wwzzgg"},
	  {"is":true,"weight":51.0,"name":"best","age":26}]})");
	json json_output = json(list);
	return json_output;
  });

服务端渲染

  app.default_route()([] {
	char name[64];gethostname(name,64);
	json j{{"servername",name}};
	return mustache::load("404NotFound.html").render(j);
  });

JSON响应

app["/json"]([]{
    cc::json x;
	x["message"] = u8"你好 世界!";
	x["double"]=3.1415926;
	x["int"]=2352352;
	x["true"]=true;
	x["false"]=false;
	x["null"]=nullptr;
	x["bignumber"]=2353464586543265455;
    return x;
});

论据

app["/hello/<int>"]([](int count){
    if (count > 100) return cc::Res(400);
    std::ostringstream os;
    os << count << " bottles of beer!";
    return cc::Res(os.str());
});

编译时的处理程序参数类型检查

// 编译错误,消息"处理程序类型与URL参数不匹配"
app["/another/<int>"]([](int a, int b){
    return cc::Res(500);
});

处理JSON请求

app.post("/add_json")
([](cc::Req& req){
    auto x = cc::json::load(req.body);
    if (!x) return cc::Res(400);
	int sum=x["a"].get<int>()+x["b"].get<int>();
    std::ostringstream os;
    os << sum;
    return cc::Res{os.str()};
});

如何构建

如果您只想使用crow,请复制amalgamate/all.h 并包含它。

要求

  • C++ 编译器,支持C++17(用G++测试>8.0)
  • 任何版本的boost库
  • 构建示例的CMake
  • 建议与tcmalloc/jemalloc链接以提高速度。
  • 现在支持VS2019,功能有限(只有url的运行时检查可用。)

建筑(测试、示例)

建议使用CMake进行源代码外构建。

mkdir build
cd build
cmake ..
make

可以使用以下命令运行测试:

ctest

安装缺少的依赖项

Ubuntu

sudo apt-get install build-essential libtcmalloc-minimal4 && sudo ln -s /usr/lib/libtcmalloc_minimal.so.4 /usr/lib/libtcmalloc_minimal.so

OSX

brew install boost google-perftools

windows

首次安装boost 第二次修改CmakeLists.txt

讨论群号[1082037157]

归属

Crow使用以下库。
http解析器 https://github.com/nodejs/llhttp

版权所有Fedor Indutny,2018。 特此免费准许任何获得本软件和相关文档文件的副本 “软件”),不受限制地处理软件,包括 但不限于使用、复制、修改、合并、发布, 分发、再许可和/或销售软件的副本,并允许 向其提供软件的人员,根据以下情况: 包括上述版权声明和本许可声明在软件的所有副本或主要部分。 本软件按“原样”提供,不提供任何形式的保证 或暗示,包括但不限于适销性、特定用途的适用性和非侵权性。在 任何情况下,作者或版权持有人均不对任何索赔负责, 损害赔偿或其他责任,无论是在合同诉讼、侵权诉讼或 否则,由软件或在软件中使用或进行其他交易。

qs_parse https://github.com/bartgrantham/qs_parse

版权所有(c)2010 Bart Grantham 在这里,任何获得副本的人都可以免费获得许可 本软件及相关文档文件(“软件”),以处理 在软件中不受限制,包括但不限于权利 使用、复制、修改、合并、发布、分发、再许可和/或销售 软件的副本,并允许使用软件的人员 按照以下条件提供: 上述版权声明和本许可声明应包含在 软件的所有副本或主要部分。

TinySHA1 https://github.com/mohaps/TinySHA1

TinySHA1-SHA1算法的一个只包含报头的实现。基于boost::uuid::details中的实现 Cmohaps@gmail.com 特此授予出于任何目的使用、复制、修改和分发本软件的许可,无论是否收费,前提是上述版权声明和本许可声明出现在所有副本中。 本软件按“原样”提供,作者不承担与本软件有关的所有保证,包括对适销性和适用性的所有暗示保证。

json https://github.com/nlohmann/json

版权所有(c)2013-2021 Niels Lohmann 在这里,任何获得副本的人都可以免费获得许可 本软件及相关文档文件(“软件”),以处理 在软件中不受限制,包括但不限于权利 使用、复制、修改、合并、发布、分发、再许可和/或销售 软件的副本,并允许使用软件的人员 按照以下条件提供: 上述版权声明和本许可声明应包含在所有 软件的副本或大部分。 本软件按“原样”提供,不提供任何形式的明示或明示担保 默示,包括但不限于适销性保证, 适用于特定目的和非侵犯性。在任何情况下 作者或版权持有人对任何索赔、损害或其他 无论是在合同诉讼、侵权诉讼或其他诉讼中, 不属于或与本软件有关,或与本软件的使用或其他交易有关 软件。

简介

Crow是最好便捷式基于boost库的C++微服务模块化开发框架,目前已支持sql查询,且效率高、速度快。 展开 收起
BSD-3-Clause
取消

发行版 (13)

全部

贡献者

全部

近期动态

加载更多
不能加载更多了
C++
1
https://gitee.com/ASCIPHX/crow.git
git@gitee.com:ASCIPHX/crow.git
ASCIPHX
crow
Crow
master

搜索帮助

E71a60c3 8189591 Df7b7c6b 8189591