1 Star 0 Fork 8

詹向向 / Crow

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

乌鸦标志

乌鸦是Web的C++微服务框架,支持mac,linux,windows,三大平台,开发速度最快最迅速最猛烈,下一步即将支持ORM。目前估测能在techempower应该可以排到世界前五。若文件有乱码,请使用GBK编码打开具有乱码的文件,这样才能显示出正确的中文。

示例(example_vs)🚀

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

Travis Build Coverage Status

#include "crow.h"
int main(){
    crow::SimpleApp app;
    CROW_ROUTE(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)
  • 仅页眉的每一项功能 crow_all.h with every features (Download from here)
  • 中间件支持,Websocket支持
  • 支持静态资源,并且默认在'static/'目录
  • 模块化开发,效率非常高,代码极简

仍在开发中

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

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

示例

sql查询

  app.route("/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.route("/list")([]() {
	List list=json::parse(R"({"user":{"is":false,"age":25,"weight":50.6,"name":"www","state":null},
            "userList":[{"is":true,"weight":52.0,"age":23,"state":true,"name":"wwzzgg"},
	    {"is":true,"weight":51.0,"name":"best","age":26}]})").get<List>();
	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响应

CROW_ROUTE(app, "/json")([]{
    crow::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;
});

论据

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

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

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

处理JSON请求

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

如何构建

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

Copyright (c) 2014, ipkn All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

简介

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

发行版

暂无发行版

贡献者

全部

近期动态

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

搜索帮助