其他分享
首页 > 其他分享> > 点餐系统-httplib库

点餐系统-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