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. 【Java8新特性】- 接口中默认方法修饰为普通方法

    Java8新特性 - 接口中默认方法修饰为普通方法 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学 ...

  2. leetcode刷题记录之25(集合实现)

    题目描述: 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表. k 是一个正整数,它的值小于或等于链表的长度.如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原 ...

  3. .Net CLR异常简析

    楔子 前面一篇研究了下C++异常的,这篇来看下,CLR的异常内存模型,实际上都是一个模型,承继自windows异常处理机制.不同的是,有VC编译器(vcruntime.dll)接管的部分,被CLR里面 ...

  4. 「JOISC 2022 Day1」京都观光 题解

    Solution 考虑从\((x_1,y_1)\)走到\((x_2,y_2)\)满足只改变一次方向,则容易求出先向南走当且仅当 \[\frac{a_{x_1} - a_{x_2}}{x_1 - x_2 ...

  5. 1.MongoDB之服务启动

    1. 编写docker-compose.yaml文件 version: "3" services: mongo: image: mongo:4.2.6 ports: - 27017 ...

  6. Vue3.x+element-plus+ts踩坑笔记

    闲聊 前段时间小颖在B站找了个学习vue3+TS的视频,自己尝试着搭建了一些基础代码,在实现功能的过程中遇到了一些问题,为了防止自己遗忘,写个随笔记录一下嘻嘻 项目代码 git地址:vue3.x-ts ...

  7. 一天十道Java面试题----第三天(对线程安全的理解------>线程池中阻塞队列的作用)

    这里是参考B站上的大佬做的面试题笔记.大家也可以去看视频讲解!!! 文章目录 21.对线程安全的理解 22.Thread和Runnable的区别 23.说说你对守护线程的理解 24.ThreadLoc ...

  8. 15行python代码实现人脸识别

    方法一:face_recognition import cv2 import face_recognition img_path = "C:/Users/CJK/Desktop/1.jpg& ...

  9. 重新整理 .net core 实践篇 ———— linux上排查问题实用工具 [外篇]

    前言 介绍下面几个工具: Lldb createdump dotnet-dump dotnet-gcdump dotnet-symbol Procdump 该文的前置篇为: https://www.c ...

  10. LAPM概述及配置

    一.LAMP概述 1.1LAMP的概念 LAMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整套系统和相关软件,能够提供动态web站点服务及其应用开发环境 LAMP是一个缩写词,具体包括L ...