1 Star 2 Fork 1

Asciphx / FabCc

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

FabCc

license platform release

灵感来自于其他c++知名web框架, FabCC的定位是一个网络框架, 其特点是简洁、迅速、实用、活跃、全面。

特征

  • 全平台支持,(已经测试Linux和Windows)
  • 现在最低编译器版本支持到了c++14, 目前兼容了c++17的许多特性包括any, optional, string_view, 以及部分的扩展
  • 最少的第三方库,均以源文件形式存放项目中
  • 最快的api例如lexical_cast, 以及EncodeURL, DecodeURL
  • 难以置信的编译速度,开发速度同时也得到提升
  • 支持网页版Postman,地址是127.0.0.1:8080/test.html
  • 可以对路由进行增删改查,动态路由参考【lithium】迭代而成
  • 支持类似于无栈协程的非对称协程, 像python的生成器, 协程来自【boost
  • 拥有类似nodejs的api,写起来也像js, http解析器来自【nodejs
  • 字符串映射的str_map【beast,crow
  • 静态文件缓存file_sptr【libhttp
  • 支持单元测试,文档请见【coost
  • Json集成于【coost】, 并支持序列化与反序列化
  • 设计具备借鉴于rust语言风格的box【std::boxed::Box】,因此无需使用裸指针
  • zlib压缩来自【zlib

仍在开发中

  • 路由大括号表达式
  • gzip压缩
  • body-parser的支持
  • ssl证书
  • websocket
  • 协程
  • udp服务端
  • tcp客户端client

説明

  • 如果机器翻译过来,FabCc可以是晶圆厂,所以FabCc象征着最复杂又最小化的芯片。
  • 命名空間采用FabCc的大寫駝峰fc來使用。
  • 协程的原理图
  • yield
  • 示例🚀
  • 测试

例子

using namespace fc;
void funk(Req& req, Res& res) {
  res.write("主页路由被std::bind复写!");
};
int main() {
  Timer t; App app; Tcp srv;
  app.sub_api("/", app.serve_file("static"));//服务文件接口
  app["/json"] = [](Req& req, Res& res) {
	Json x = { { "h", 23 }, { "b", false }, { "s", "xx" }, { "v", {1,2,3} }, { "o", {{"xx", 0}} } };
	res.write(x.dump());//json响应
  };
  app["/sockets"] = [&srv](Req& req, Res& res) {
	Buf b("("); b << srv.$.size() << ")[";
	for (std::set<u32>::iterator i = srv.$.begin(); i != srv.$.end(); ++i) b << *i << ',', Conn::shut(*i, _READ);
	res.write(b.pop_back() << ']');//获取所有活动的套接字id, 并且把所有套接字关闭
  };
  app["/api"] = [&app](Req& req, Res& res) {
	res.write(app._print_routes());//返回路由列表
  };
  app.post("/api") = [](Req& req, Res& res) {
	BP bp(req, 4096);
	for (auto p : bp.params) {
	  res.write(p.key + ": " + (!p.size ? p.value : p.filename) + ", ");
	}
  };
  app["/yield"] = [](Req& req, Res& res) {
	Json x = { 1,2,3 };
	co c{ [&x](co&& c) {
	  x = json::parse(R"([{"confidence":0.974220335483551,"text":"lenovo联想","region":[[191,80],[672,80],[672,148],[191,148]]},
		{"confidence":0.6968730688095093,"text":"BY:花享湖月","region":[[250,866],[332,866],[332,885],[250,885]]}])");
	  return std::move(c);
	  } };
	res.write(x.str());
	c = c.yield();
	res.write(x.dump());
  };//协程, 使用co的yield函数来保证执行顺序
  app["/del"] = [&app](Req&, Res& res) {
	app.get() = nullptr;
	res.write("主页的路由被删除!!");
  };
  app["/timer"] = [&](Req&, Res& res) {
	t.setTimeout([&srv] {
	  printf("该路由已闲置1分钟,服务器即将自动关闭!!");
	  srv.exit();
	}, 60000);
	res.write("关闭服务计时器倒计时启动!");
	app.get() = std::bind(funk, std::placeholders::_1, std::placeholders::_2);
  };
  //启动服务器
  srv.router(app).timeout(6000).setTcpNoDelay(true).setThread().Start("0.0.0.0", 8080);
  return 0;
}

建筑(测试、示例)

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

mkdir build
cd build
cmake ..
cmake --build ./ --config Release

简介

全平台异步非阻塞c++协程Web框架 展开 收起
AGPL-3.0
取消

发行版 (9)

全部

贡献者

全部

近期动态

加载更多
不能加载更多了
C++
1
https://gitee.com/ASCIPHX/FabCc.git
git@gitee.com:ASCIPHX/FabCc.git
ASCIPHX
FabCc
FabCc
main

搜索帮助