项目1--博客管理系统--业务逻辑模块-(http服务器,)--httplib库的使用,处理流程,网络通信接口设计

我们的服务器对应多个客户端,如果多个客户端同时发起查询操作
如果每一个查询操作都会实例化一个TableBlog对象,新建一个mysql句柄
如果每一个查询操作都会实例化一个TableTag对象,使用同一个mysql句柄
在这里插入图片描述

讲解了stoi函数 看图
在这里插入图片描述

讲解了 mvc

数据管理模块:基于mysql操作封装类,对应数据库中的各个表,通过实例化的对象完成对数据库的访问操作。
业务逻辑模块:针对客户端的请求 提供业务处理能力

开始讲解业务逻辑模块

1、网络通信功能 (提供客户端与服务端的网络通信功能)
1、后台搭建http服务器;(主要是搭建服务器,使用了httplib的接口,也没有细化搭建,但是了解了httplib的实现)
2、客户端实际上就是浏览器(客户端不需要搭建 就是浏览器,根据模块点点点)

http服务器:

    **是什么?**
    1、采用http协议实现的服务, http协议只是一个应用层协议(一种数据格式),采用了http协议进行通信的进程 可以被称之为http服务进程。
    2、http是应用层协议,在传输层使用tcp协议
    3、http服务器,就是一个tcp服务器,只是在应用层(应用程序界面),完成http协议格式的请求与响应的解析 以及针对请求提供服务。
    **如何搭建?**
    1、搭建tcp服务端
    2、等待客户的请求,解析请求,得到http协议格式中的各个要素(请求方法,url,path资源路径以及查询字符串,头部字段,正文)
    3、根据客户端的请求,完成业务处理后,组织http响应数据,进行响应。

http服务器我们并不从头开始搭建,借助于httplib库进行搭建
使用第三方库搭建框架,通常会比较简单,只要用接口就可以,但是面试,同通常会问使用库搭建服务器的时候,这个库是如何实现的,为什么不自己实现(不是不会自己实现,可以实现,但是为了效率,直接使用别人已经实现好的接口搭建,但是我们了解库的搭建流程)json库不了解的原因是因为 他就是序列化反序列化,httplib里边比较复杂,所以需要了解

在git里边找到cpp-httplib文件,然后到linux界面下去下载,并且打开cpp-gttplib只需要里边的htplib.h就可以了在这里插入图片描述
在这里插入图片描述
打开httplib文件,里边的代码不断的在更新,使用这个文件,可以搭建服务器和客户端,都是可以的。在这里插入图片描述
将cpp-httplib文件的httplib.h的文件 复制到example文件中,这时候相当于thhplib.h文件是一个我们自己的文件,在搭建服务器的时候可以直接加载头文件#include"httplib.h"

httplib服务器示例

#include “httplib.h”//因为在linux下 httplib.h被放在了运行文件中,所以将这个当作自己的头文件去使用
using namespace httplib;//使用httplib的命名空间

void helloworld(const Request& req, Response& res)
{
   
   res.set_content("Hello World!", "text/plain");
}

int main(void)
{
   
  Server svr;//实例化一个server对象,使用上边的httplib的文件里边的命名
//svr.Get()--成员函数,--注册请求--业务处理路由关系--告诉服务器哪个请求对应使用哪个函数进行业务处理
//第一个参数:“/hi” ---url中的path资源路径
//第二个参数,写helloworld函数就是为了讲解 第二个参数,也是lambel表达式
//第二个参数其实就相当于是一个不同的处理函数  第一个参数就是不同的请求
  svr.Get("/hi", [](const Request& req, Response& res) {
   
    res.set_content("Hello World!", "text/plain");
  });
  svr.Get("/hi", helloworld);这个与上边一样GET一样,如果有helloworld函数的话。。

///
  svr.Get(R"(/numbers/(\d+))", [&](const Request& req, Response& res) {
   
    auto numbers = req.matches[1];
    res.set_content(numbers, "text/plain");
  });
 
  svr.Get("/body-header-param", [](const Request& req, Response& res) {
   
    if (req.has_header("Content-Length")) {
   
      auto val = req.get_header_value("Content-Length");
    }
    if (req.has_param("key")) {
   
      auto val = req.get_param_value("key");
    }
    res.set_content(req.body, "text/plain");
  });
  //
  svr.Get("/stop", [&](const Request& req, Response& res) {
   
    svr.stop();
  });
  ///
  svr.listen("localhost", 1234);//开始服务器监听
}


真正可以使用的代码
#include "httplib.h"

int main(void)
{
   
  using namespace httplib;

  Server svr;/

  svr.Get("/hi", [](const Request& req, Response& res)</
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值