cpp-httplib库的简介与工作流程

4 篇文章 0 订阅
1 篇文章 1 订阅

A C++11 single-file header-only cross platform HTTP/HTTPS library.
It’s extremely easy to setup. Just include the httplib.h file in your code!
NOTE:
This is a multi-threaded ‘blocking’ HTTP library. If you are looking for a ‘non-blocking’ library, this is not the one that you want.

cpp-httplib简介

cpp-httplib是一个以C++11特性编写的,跨平台HTTP/HTTPS库。使用时,只需在代码中包含httplib.h文件。
注意:这是一个多线程的阻塞HTTP库。
在简易点餐系统的项目中,我使用httplib库来实现http服务器的搭建,所以我们在这里介绍一下httplib的工作流程。

下载地址:GitHub/yhirose/cpp-httplib

httplib.h头文件的组成

类名
class Server服务端类
class Client客户端类
struct Response响应数据类
struct Request请求数据类
class ThreadPool线程池类

服务端类的组成

class Server
{
	…………
	//get post put delete 方法
	Server &Get(const char *pattern, Handler handler);
	Server &Post(const char *pattern, Handler handler);
	Server &Put(const char *pattern, Handler handler);
	Server &Delete(const char *pattern, Handler handler);
	…………
	//监听
	bool listen(const char *host, int port, int socket_flags = 0);
};

Server类中,还包含了map<pair<string,string>,function> route这样的请求与处理的路由表。

客户端类的组成

class Client
{
	………………
	//创建client
	explicit Client(const std::string &host, int port);
	//post get head put delte 方法
	Result Get(const char *path);
	Result Head(const char *path);
	Result Post(const char *path);
	Result Put(const char *path);
	Result Delete(const char *path);
	………………
};

响应数据类的组成

struct Response
{
  …………
  int status = -1;//状态码
  Headers headers;//头部
  std::string body;//正文
  …………
};

请求数据类的组成

struct Request
{
  …………
  std::string method;//请求方法
  std::string path;//请求路径
  std::string body;//正文
  Match matches;//捕捉到的数据
  …………
};

httplib的工作流程

文字描述

一、实例化一个Server对象,Server对象中有一个请求与处理路由表,记录各种请求对应的处理函数。

二、注册请求路由,告诉httplib,哪个请求应该用哪个函数处理。

三、搭建服务器,开始监听。

四、当服务器收到一个客户端连接,将新建连接抛入线程池,线程池中的线程负责与指定客户端通信。

线程中的操作:

  1. 接收请求数据,按照http请求协议格式进行解析,实例化httplib:response对象,将解析信息填入其中
  2. 根据请求信息,在route路由表中查找对于这个请求有没有对应的处理函数
    (一)如果没有,直接返回404
    (二)如果有,则使用对应的函数指针执行处理函数
    处理函数:
    (1)传入请求信息httplib:request
    (2)实例化一个httplib:response对象传入处理函数,在处理函数内部,用户实现针对请求的业务处理,在业务处理完毕后填充response对象
  3. 在线程中执行完处理函数后,得到一个填充完的response对象
    根据其中的数据组织http响应,回复给客户端
  4. 等待还有没有请求需要处理,没有关闭套接字

图片描述

在这里插入图片描述
注:使用httplib搭建一个HTTP服务器的实现思路与工作流程类似。

  • 13
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值