点餐系统-httplib库
作者:互联网
httplib库到底实现了什么功能, 到底是干什么的
httplib库主要是搭建http服务器或者客户端, 用来实现http协议网络通信,
对于项目来说, 如果使用了httplib库, 就不用关注http服务器如何搭建,
只需要关注针对什么样的请求进行什么样的业务处理, 相当于把重心
放到业务处理方向
httplib搭建httplib服务器工作流程:
最主6要的三个类
httplib::Server
httplib::Request
httplib::Response
Server:
内部有一个非常重要的信息map表
map<pair<string,string>,function> route-请求与处理的路由表(针对那个请求处理那个函数)
1.在Server中调用的第一个接口srv.Get, 作用是给表中添加信息,
Get(资源路径, 函数地址)中的两个参数, 调用Get("/hello", hello),
表中会添加两个信息
key | val |
(Get + /hello) | 0*2356445(地址),指向hello函数 |
... |
... |
2.另一个重要的接口, listen("ip地址 / 域名信息", "端口信息")
srv.listen("0.0.0.0", 8080), 这个接口相对于搭建l一个监听当前主机
所有ip:8080端口的tcp服务器
0.0.0.0相当于可识别当前主机任意的网卡ip地址
httplib中的处理思想流程
当服务端收到一个客户端连接, 则将新建连接抛入线程池, 线程池中的线程负责
与指定客户端进行通信(http通信)
1.接收请求数据, 按照http请求协议格式进行解析
格式: (请求方法, 资源路径, 查询字符串, 头部字段, 正文......)
实例化httplib::Request对象, 将解析的信息填入其中
2.根据请求信息, 在route路由表中查找针对这个请求有没有对应的处理函数
如果没有则直接返回404 -- 请求的资源不存在
如果有, 则使用对应函数指针执行这个处理函数(hello, 程序员自定义的),
1.传入请求信息, 2.实例化一个httplib::Response对象, 传入函数
在处理函数内部, 用户实现针对请求的业务处理, 在业务处理完毕之后
填充Response对象(响应状态码, 正文数据, 头部字段)
3.线程中执行完处理函数之后, 得到了一个填充完毕的Response对象,
根据其中的数据(响应状态码, 正文数据, 头部字段)组织http响应
协议格式的数据, 回复给客户端
4.等待还有没有请求需要处理(没有则关闭套接字)
注册路由成员函数
Server.Get()/Post()/Put()/Delete()
设置静态资源默认路径接口: 设置了这个路径之后, 当前端在请求静态资源的时候, 例如
index.html, 就会自动的先到这个路径下查找有没有对应静态资源文件, 如果有则自动
读取文件数据进行回复
Server.set_base_dir(char *path)
标签:httplib,http,请求,Get,系统,Server,点餐,hello 来源: https://www.cnblogs.com/enjoyC/p/14879936.html