paozhu c++ web framework 框架原理
paozhu c++ web framework 使用 asio 网络库,如果用动态库方式还要boost库。
paozhu框架 使用两个线程池,一个是框架使用的解析协议,连接保持线程池,一个是运行用户业务代码的线程池。
webserver
流程是 http/https 连接进来
判断http链接类型。
如果是http1走http1解析,然后是不是静态文件,是直接发送,如果是动态,走用户线程池,加载用户业务代码运行。
如果进http2走http2解析,丢到用户线程池,多线程返回给用户数据,如果是静态文件直接发送,如果是动态,加载用户业务代码运行。
ORM
orm 模块是直接用paozhu_cli生成orm文件,解决了c++ 一些缺点,目前可以从数据库生成orm文件,支持mysql,因为网络公司都是用mysql多。
数据库配置文件在conf目录 mysqlorm.conf 文件
提前建好数据库和表,在根目录运行paozhu_cli,选择m 可以进入orm 文件生成
auto users = orm::cms::User();
users.where("name=", username).whereAnd("password=", md5string).limit(1).fetch();
users.sqlstring;
orm 是命名空间,cms是数据库标签,在mysqlorm.conf 里面标注,用来隔离orm文件,这样数据库和另一个数据表名相同不会冲突。
User是表名,第一个字母大写,sql操作是链式操作。
最后拼装sql。有一个字符安全过滤函数。
sqlstring 是拼装好的sql语句,然后发给mysql线程池,选择一个链接,然后返回数据,第一行记录会在
users.data;
完整记录在users.record 这是一个vector数组。users.data.userid 就是字段访问方式。所以建数据表名和字段有要求,字段类型有8到9种,详细看orm模块
view
html视图模块
view 目录是原始html文件,在里面加上标签,然后paozhu_cli
里面选择 v或f生成 cpp文件
v 是生成动态库
f 是生成.h和.cpp文件到viewsrc 目录,然后随框架一起编译,建议测试时候使用v生成,产品开发完毕使用f
初学者可以选择f。
controller
控制器模块
如果是请求是动态内容,那么在用户线程池运行,用户运行在一个线程中,框架会调用用户注册函数。
common 目录
reghttpmethod.hpp
reghttpmethod_pre.hpp
里面两个文件是 控制器注册点,pre的是需要前置方法调用,比如权限认证,是否已经登录了
控制器文件在 controller 目录
里面有一个include 目录和src目录 里面放着的是控制器函数代码,具体怎么放,用户自己把握,如果代码多可以一个文件一个函数。
第一层cpp文件,是用来生成动态库的,这样运行可以动态加载,不用重新编译整个框架,初学者建议用文件模式。
因为生成动态库,还要使用paozhu_cli 去生成。
框架会传一个httppeer指针,里面可以取get post files header cookie session等值
std::string testhello(std::shared_ptr<httppeer> peer)
{
httppeer &client = peer->getpeer();
client << " Hello world! ";
return "";
}
client 是重载了输出符号,所以输出比较方便。
client.output 是一个string 对象,所有输出都保存在这里。
peer->getpeer() 是取得原始指针,可以重载输出符号,但是如果还要传给其它函数最好还是传智能指针。
websockets
在websockets目录,里面pushloop 方法是 框架定时调用方法,如果你有推送需求可以放这里,有timeloop_num变量控制,如果为0,会退出。
timeloop_num建议大于2,就是2秒间隔,一般5秒以上比较好。
服务器往客户端推送 5秒左右可以了,目前是单线程运行,所以看自己业务。以后再加入多线程。
标签:web,users,框架,文件,c++,framework,orm,线程,paozhu From: https://www.cnblogs.com/paozhu/p/16974855.html