# C++web 框架

# 简介

项目地址:https://github.com/charmber/Cppserve 麻烦点个小🌟

目前框架准备取名为 chamber,具体功能正在逐渐完善,如有改进或者提议的地方欢迎指导

后续将会推出详细的使用文档,以及头文件引入教程,目前支持使用方式
1. 直接引入头文件 chamber.h

clang++ main.cpp -lmysqlclient

2. 使用 CMakeLists.txt 引入直接构建

# 文件结构

----basedata
    ---src      数据库源文件
    ---corm.h   数据库声明头文件
----http        //tcp请求响应逻辑部分
	---httpheader.h
	---httpserve.h
	⌙--router
	    ---router.h
----str        //字符串以及json序列化和反序列化
	---json.h
----test       //框架测试代码
        ---controller
        ---router.cpp
        ---main.cpp
Cmdouble.h

文件目录:

  • http:该目录为存放网络通行建立以及路由选择之类功能目录
  • router:该目录为进行路由选择等功能处理目录
  • str:该目录为字符串相关处理目录
  • basedata: 该目录为数据库相关目录
  • test:该目录为框架测试代码

文件名:

  • httpheader.h: 处理 http 请求头部以及响应解析等函数
  • httpserve.h: 处理 http 通信服务相关工作
  • router.h: 处理 url 解析等工作
  • json.h: 处理 json 格式序列化和反序列化操作
  • Cmdoble.h:c++ 标准库头文件存放文件

# 支持路由分发功能

通过 router 对象调用 AddUrl 方法即可添加不同路由对应处理的业务逻辑函数

# 增加线程池功能:

可选择是否使用多线程功能,在创建路由函数时候传入创建线程对象
多线程使用了一个线程池进行管理,实现了一个任务队列对任务进行处理
明显提高了 io 请求的并发能力,

# 增加 epoll 多路复用 - 边缘 (ET) 非阻塞模式

# 性能测试结果

在并发量为 4570 的情况下也能稳定全部请求成功,并且每分钟并发量达到 54 万,QBS 可以达到上万次,10304/s
(此并发量请求全部成功没有延迟,因此还没有达到最大性能,我的测试机是虚拟机,目前只能达到这个请求数)

# 增加数据库 curd 相关功能,支持面向对象式传参使用,不在依靠 SQL 语句

# 路由相关 api

实现类为 router,
例如添加一个 http 请求:

// 添加 GET 请求
    router.Get("index",test);   // 第二个参数即为调用接口
// 添加 POST 请求
    router.POST("login",login);

然后即可启动一个服务:

// 创建一个服务对象,传入需要开启的端口号,调用 run 即可
int main()
{
    chamber c(8080);
    c.run();
    return 0;
}

如果需要开启多线程则需要调用路由对象方法以及创建线程池对象

int main()
{
    ThreadPool pool(8);     // 选择需要开启的最大线程数量,默认为 4 个
    pool.init();
    router.StartThreadPool(&pool);
    RouterManage();
    chamber c(8080);
    c.run();
    return 0;
}

调用接口函数响应时候则可以

// 传入一个 Header 对象,封装 json 成字符串传入 SendRequestHeader,以及选择响应状态码即可
void test(Header hea){
    ChJson te;
    te["测试"]="成功";
    te["测试2"]="哈哈哈";
    std::string st= Json(te);
    hea.SendRequestHeader(200,st);
}

使用 SQL 操作数据库可以

c.InitMysql("127.0.0.1", "root", "131420", "test", 3306);
    c.ConditionSearch("user", "age>=", "15", "name", "age");
    c.GetResult();
    
    std::unordered_map<std::string,std::string> tmp={
        {"name","测试"},
        {"age","33"},
        {"number","11445566"},
        {"ID","8"}
    };
    c.InsertData("user",tmp);
    c.CloseMysql();

最终效果:

阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Charmber 微信支付

微信支付

Charmber 支付宝

支付宝

Charmber 贝宝

贝宝