年度收尾 C++ Web 框架 Paozhu 1.5.4 版,支持 PHP、HTTP2 稳定百万压测
C++ Web框架Paozhu,发布一年,经过几次不停重构,目前百万压测没有问题。
1.5.4版,大范围重构、代码更加现代化和稳定,全球几乎唯一自己开发解析http2协议的C++框架,跟系统高度集成没有性能开销。
作为新的一代服务器容器程序,Paozhu可以承担PHP开发迁移,老代码可以不动,新业务使用C++20等现代快速开发,Paozhu 使用FastCGI+PHP-FPM方式,C++20完善,开发速度也可以比肩脚本语言,加上三大编译器支持内存泄漏检查asan,能过编译器,运行起来就没有问题,有问题可以自动定位。
Paozhu C++ Web框架 内置强大的C++ ORM模块,简单易用,自动从数据库生成ORM实体类,内置分页,几行代码可以代替Java几百行代码。
Paozhu C++ Web框架经典内容列表,包括搜索、分页程序,鉴权等
//@urlpath(admin_islogin,admin/listarticle) std::string admin_listarticle(std::shared_ptr<httppeer> peer) { httppeer &client = peer->getpeer(); try { auto topicm = orm::cms::Topic(); topicm.where("userid", client.session["userid"].to_int()).asc("parentid").fetch(); unsigned int topicid = client.get["topicid"].to_int(); unsigned int page = client.get["page"].to_int(); std::string searchword = client.get["searchword"].to_string(); searchword = mb_substr(searchword, 0, 15); client.val["topicid"] = topicid; client.val["list"].set_array(); OBJ_ARRAY temp; std::map<unsigned int, std::string> topickv; std::vector<unsigned int> topic_id_array;//articles under this topic and sub topics if (topicid > 0) { topic_id_array.push_back(topicid); } for (unsigned int i = 0; i < topicm.record.size(); i++) { temp["id"] = topicm.record[i].topicid; temp["parentid"] = topicm.record[i].parentid; temp["value"] = topicm.record[i].title; client.val["list"].push(temp); topickv[topicm.record[i].topicid] = topicm.record[i].title; if (topicid > 0) { for (unsigned int j = 0; j < topic_id_array.size(); j++) { if (topicm.record[i].parentid == topic_id_array[j]) { topic_id_array.push_back(topicm.record[i].topicid); } } } } auto artmodel = orm::cms::Article(); artmodel.where("userid", client.session["userid"].to_int()); if (topicid > 0) { std::string topicid_sql_str = array_to_sql(topic_id_array); if (topicid_sql_str.size() > 0) { artmodel.whereIn("topicid", topicid_sql_str); } } if (searchword.size() > 0) { artmodel.andsub().whereLike("title", str_addslash(searchword)); artmodel.whereOrLike("content", str_addslash(searchword)).andsub(); client.val["searchword"] = searchword; } auto [bar_min, bar_max, current_page, total_page] = artmodel.page(page, 10, 5); client.val["pageinfo"].set_array(); client.val["pageinfo"]["min"] = bar_min; client.val["pageinfo"]["max"] = bar_max; client.val["pageinfo"]["current"] = current_page; client.val["pageinfo"]["total"] = total_page; artmodel.select("aid,topicid,title,createtime,sortid,isopen").desc("aid").fetch(); client.val["alist"].set_array(); OBJ_ARRAY tempa; if (artmodel.size() > 0) { for (auto &item : artmodel) { tempa["title"] = item.title; tempa["aid"] = item.aid; tempa["date"] = item.createtime.substr(0, 10); tempa["topicname"] = topickv[item.topicid]; tempa["sortid"] = item.sortid; tempa["isopen"] = item.isopen; client.val["alist"].push(tempa); } } } catch (std::exception &e) { client.val["code"] = 1; } peer->view("admin/listarticle"); return ""; }
1.特性🔥🔥🔥🔥🔥
✅ 1. 自带json编解码不用第三方库,标准json支持
✅ 2. 支持多域名网站
✅ 3. 支持多域名ssl 服务端
✅ 4. 支持http/1.1、http/2协议
✅ 5. 支持websocket服务端
✅ 6. 框架自带websocket推送,支持定时推送到webscoket客户端
✅ 7. 支持httpclient get post,同步异步、协程模式,数据采集
✅ 8. 框架自带ORM,使用链接池方式,目前支持mysql
✅ 9. 框架自带线程池,和用户代码运行的线程池
✅10. 框架使用asio自带的协程
✅11. 框架特色是I/O 使用协程池 用户代码运行使用线程池,类似GO那种调度,只是针对http请求调度
✅12. 框架支持普通文件gzip、br,并支持缓存到磁盘,下次不用cpu再压缩
✅13. URL、POST和上传文件,解析结果client.get[] client.post[] client.files[]方式获取内容
✅14. 自带sendmail类库
✅15. 生成二维码(qrcode),需要gd、qrencode库
✅16. 插件化编程,热动态更新,使用动态库方式
✅17. 框架内置通用数据缓存模块,ORM结果缓存,提高并发能力
✅18. 框架controller目录注解功能,方便添加URL路由映射,降低入门心智
✅19. 结构和类注解JSON功能,使用json_encode json_decode操作复杂C++结构体和JSON互转,可以参考Wiki
✅20. 提供一个完整admin后台管理框架(见后面图片), 访问URL为 /admin/main
✅21. 支持PHP-FPM fastcgi运行模式,代替Apache做PHP前端,让PHP程序员平稳过渡到 C++ 开发模式
https://github.com/hggq/paozhu

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
2023 基于 mybatis 的 orm:mybatis-mp 1.2.8 发布 - 超丰富的 api!
mybatis-mp 包含丰富的 api: 1:基于注解,映射数据库; 2:支持多表 join 和返回; 3:api 采用 lambda 和 stream 流式设计; 4:内置分页以及超强的 sql 优化功能; 5:稳定且性能极优; 6:轻量级封装 mybatis,几乎没有侵入; 7:api 丰富,支持数据库函数、多表、乐观锁、多租户、逻辑删除、默认值(可动态值) 等众多功能; 8:零学习成本,和写 sql 一样方便。 9:支持复杂的返回关系映射:例如一对一 ,一对多,多对多; 10:内置代码生成器,通过配置,可定制自身规范; 11:全新的框架,全新的设计理念,新的就是好!
- 下一篇
x-easypdf v3.0.0-BETA 版本发布
本次更新内容如下: 1. 【pdfbox模块】整体重构,简化类名,顺序渲染 2. 【pdfbox模块】支持中文字体名称设置 3. 【pdfbox模块】支持全局边距设置 4.【pdfbox模块】文本组件支持自动处理\n、\t等特殊字符,无须自行处理 5.【pdfbox模块】抽象出分析器、提取器、处理器,逻辑更清晰 6.【pdfbox模块】使用pdfbox3.0.1最新依赖 7.【fop模块】简化类名 本次更新【pdfbox模块】暂未提供表格组件,暂未提交中央仓库,欢迎在gitee上下载试用,更欢迎大家提出宝贵意见
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Linux系统CentOS6、CentOS7手动修改IP地址
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Hadoop3单机部署,实现最简伪集群
- CentOS6,7,8上安装Nginx,支持https2.0的开启