我们的服务器对应多个客户端,如果多个客户端同时发起查询操作
如果每一个查询操作都会实例化一个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)</