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秒左右可以了,目前是单线程运行,所以看自己业务。以后再加入多线程。

试试框架hello world输出教程

paozhu c++ web framework 框架原理的更多相关文章

  1. web server && web framework角色区分

    问题 web framework是否包括webserver? 是否可以包括? webserver 和 framework的关系是? https://www.quora.com/What-is-the- ...

  2. 介绍一个python的新的web framework——karloop框架

    karloop是一款轻型的web framework,和tornado.webpy类似.mvc分层设计,眼下已经公布早期版本号了,使用方便, 下载地址例如以下:https://github.com/k ...

  3. Node.js: What is the best "full stack web framework" (with scaffolding, MVC, ORM, etc.) based on Node.js / server-side JavaScript? - Quora

    Node.js: What is the best "full stack web framework" (with scaffolding, MVC, ORM, etc.) ba ...

  4. Jena 简介:通过 Jena Semantic Web Framework 在 Jave 应用程序中使用 RDF 模型

    简介: RDF 越来越被认为是表示和处理半结构化数据的一种极好选择.本文中,Web 开发人员 Philip McCarthy 向您展示了如何使用 Jena Semantic Web Toolkit,以 ...

  5. Choosing web framework: ASP.NET MVC vs Django Python vs Ruby on Rails(转载)

    来源:http://podlipensky.com/2012/06/choosing-web-framework-asp-net-mvc-vs-django-python-vs-ruby-on-rai ...

  6. go web framework gin group api 设计

    假如让你来设计group api, 你该怎么设计呢? group api 和普通api的区别在于前缀不同,如果group api的版本为v1.0 那么相对应的url为/v1.0/xxx, 如果是普通a ...

  7. go web framework gin middleware 设计原理

    场景:一个middleware可以具体为一个函数,而由前面的gin 路由分析可得,每一个路径都对有一个HandlersChain 与其对应. 那么实际上增加一个middleware的过程,就是将每一个 ...

  8. go web framework gin 路由表的设计

    在上一篇go web framework gin 启动流程分析这一篇文章中,我分析了go gin启动的过程,在这一篇文章中我将继续上面的分析,讨论gin 中路由表是如何设计的? 首先查看engine. ...

  9. backend community-driven web framework

    kataras/iris: The fastest backend community-driven web framework on (THIS) Earth. HTTP/2, MVC and mo ...

  10. Using Python with TurboGears A complete web framework integrating several Python projects

    Using Python with TurboGears TurboGears is a Python web framework based on the ObjectDispatch paradi ...

随机推荐

  1. C#-12 转换

    一 什么是转换 转换是接受一个类型的值并使用它作为另一个类型的等价值的过程. 下列代码演示了将1个short类型的值强制转换成byte类型的值. short var1 = 5; byte var2 = ...

  2. Python 实现Tracert追踪TTL值

    Tracert 命令跟踪路由原理是IP路由每经过一个路由节点TTL值会减一,假设TTL值=0时数据包还没有到达目标主机,那么该路由则会回复给目标主机一个数据包不可达,由此我们就可以获取到目标主机的IP ...

  3. Bing 广告平台迁移到 .net6

    原文链接 https://devblogs.microsoft.com/dotnet/bing-ads-campaign-platform-journey-to-dotnet-6/ 广告组件平台对于微 ...

  4. python基础--简单数据类型预览

    为了适应更多的使用场景,将数据划分为多种类型,每种类型都有各自的特点和使用场景, 帮助计算机高效的处理和展示数据.(比如数字用于数学运算.字符串用于信息传递.页面文字展示等) 1.数字类型   整型 ...

  5. python 运行错误收集

    目录 global全局声明错误 global全局声明错误 SyntaxError: name 'is_login' is used prior to global declaration 解决办法:g ...

  6. Ubuntu 环境下安装 Docker

    系统要求 Docker目前只能运行在64位平台上,并且要求内核版本不低于3.10,实际上内核越新越好,过低的内核版本容易造成功能不稳定. 用户可以通过如下命令检查自己的内核版本详细信息: $ unam ...

  7. linux重置密码

    方法一: 进入grub菜单界面 按e键 在linux开头的行按ctrl+e 或者end跳到行尾,输入rd.break 按ctrl+x mount -o remount,rw /sysroot chro ...

  8. Rock18框架之整体框架介绍

    1. 总体框架图 2.框架能解决哪些问题? 问题1: 自动化设备包含龙门架.机械手.伺服.步进等电机.IO控制.定位及纠偏.界面展示等部分.其中硬件(伺服.IO等)是需要更换的,硬件的更换不影响整套系 ...

  9. Vue3 —— 组件练习题(附源码)

    一.定义一个vue分页组件,实现客户端分页功能 1.1.子组件A(页数按钮) <!-- 本组件用于遍历分页的页数按钮 --> <template lang=""& ...

  10. i春秋Fuzzing

    先查看源码...没东西,抓包 发现也没什么,但是右边有个提示hint: ip,Large internal network(最大内网ip) 可能需要我们伪造代码进行访问,这还不简单,直接在reques ...