【c++中间件】cpp-httplib 介绍 && 使用

【c++中间件】cpp-httplib 介绍 && 使用

文章目录

在这里插入图片描述

Ⅰ. cpp-httplib 介绍与安装

C++ HTTP 库(cpp-httplib)是一个轻量级的 C++ HTTP 客户端/服务器库,它提供了简单的 API 来创建 HTTP 服务器和客户端,支持同步和异步操作。

​ 以下是一些关于 cpp-httplib 的主要特点:

  1. 轻量级cpp-httplib 的设计目标是简单和轻量,只需要一个头文件包含即可,不依赖于任何外部库。
  2. 跨平台:它支持多种操作系统,包括 WindowsLinuxmacOS
  3. 同步和异步操作:库提供了同步和异步两种操作方式,允许开发者根据需要选择。
  4. 支持 HTTP/1.1:它实现了 HTTP/1.1 协议,包括持久连接和管道化。
  5. Multipart form-data:支持发送和接收 multipart/form-data 类型的请求,这对于文件上传非常有用。
  6. SSL/TLS 支持:通过使用 OpenSSLmbedTLS 库,cpp-httplib 支持 HTTPSWSS
  7. 简单易用API 设计简洁,易于学习和使用。
  8. 性能:尽管是轻量级库,但性能表现良好,适合多种应用场景。
  9. 社区活跃cpp-httplib 有一个活跃的社区,不断有新的功能和改进被加入。

​ 安装非常简单,只需要以下命令:

git clone https://github.com/yhirose/cpp-httplib.git 

Ⅱ. cpp-httplib 使用

​ 下图是 cpp-httplib 的回调处理流程,核心是用一个哈希表来记录不同规则对于的 <正则表达式,回调函数> 的关系!

​ 比如下图我们在 GET 规则中添加了 /hi 和其对应回调函数 HelloWorld,当我们去访问 http://ip地址:端口/hi 的时候,服务器就会执行该回调函数 HelloWorld 将对应的响应填充然后进行返回!

在这里插入图片描述

​ 下面介绍以下这个 http 库中的类和接口:

namespace httplib {// 请求数据结构,封装HTTP请求信息structRequest{ std::string method;// 请求方法 (如 GET, POST, PUT, DELETE) std::string path;// 请求的路径 Headers headers;// 请求头 std::string body;// 请求体内容 Params params;// 请求参数};// 响应数据结构,封装HTTP响应信息structResponse{ std::string version;// HTTP版本 (如 "HTTP/1.1")int status =-1;// HTTP响应状态码 (如 200, 404, 500) std::string reason;// 响应状态说明 (如 "OK", "Not Found") Headers headers;// 响应头 std::string body;// 响应体内容// 设置响应体内容以及内容类型voidset_content(const std::string &s,const std::string &content_type);// 设置响应头voidset_header(const std::string &key,const std::string &val);};// 服务器类,处理客户端请求classServer{public:// 请求处理器类型,接收请求并返回响应using Handler = std::function<void(const Request &, Response &)>;// 注册 GET 请求处理函数 Server &Get(const std::string &pattern, Handler handler);// 注册 POST 请求处理函数 Server &Post(const std::string &pattern, Handler handler);// 注册 PUT 请求处理函数 Server &Put(const std::string &pattern, Handler handler);// 注册 DELETE 请求处理函数 Server &Delete(const std::string &pattern, Handler handler);// 启动服务器并监听指定的主机和端口boollisten(const std::string &host,int port);};// 客户端类,发起HTTP请求classClient{public:// 构造函数,指定主机和端口explicitClient(const std::string &host,int port);// 发起 GET 请求 Result Get(const std::string &path,const Headers &headers);// 发起 POST 请求 Result Post(const std::string &path,const std::string &body,const std::string &content_type);// 发起 PUT 请求 Result Put(const std::string &path,const std::string &body,const std::string &content_type);// 发起 DELETE 请求 Result Delete(const std::string &path,const std::string &body,const std::string &content_type);};}

测试样例

​ 按照上面图片中提到的服务器搭建流程,我们写一个测试样例:

#include"../header/httplib.h"intmain(){// 1. 实例化服务器对象 httplib::Server server;// 2. 注册回调函数 void(const httplib::Request &, httplib::Response &) server.Get("/hi",[](const httplib::Request &req, httplib::Response &rsp){ std::cout << req.method << std::endl; std::cout << req.path << std::endl;for(auto it : req.headers){ std::cout << it.first <<": "<< it.second << std::endl;} std::string body ="<html><body><h1>Hello lirendada!</h1></body></html>"; rsp.set_content(body,"text/html"); rsp.status =200;});// 3. 启动服务器 server.listen("0.0.0.0",8080);return0;}

makefile 文件:

main : main.cc g++ -std=c++17 $^ -o $@ -lpthread 
在这里插入图片描述
在这里插入图片描述

Read more

Java 中间件:Redis 分布式限流器(Redisson RateLimiter)

Java 中间件:Redis 分布式限流器(Redisson RateLimiter)

👋 大家好,欢迎来到我的技术博客! 📚 在这里,我会分享学习笔记、实战经验与技术思考,力求用简单的方式讲清楚复杂的问题。 🎯 本文将围绕Java中间件这个话题展开,希望能为你带来一些启发或实用的参考。 🌱 无论你是刚入门的新手,还是正在进阶的开发者,希望你都能有所收获! 文章目录 * Java 中间件:Redis 分布式限流器(Redisson RateLimiter) 🚦 * 什么是限流?为什么需要分布式限流? 🤔 * 限流的定义 * 单机限流 vs 分布式限流 * Redisson 简介:不只是 Redis 客户端 🧰 * Redisson RateLimiter 核心原理 🔍 * Redis 内部数据结构 * 限流流程图(Mermaid) * 快速上手:第一个 Redisson RateLimiter 示例 🚀 * 1. 添加依赖 * 2. 配置 RedissonClient * 3. 创建并使用 RateLimiter * 输出示例:

By Ne0inhk
Java 程序员的 AI 进阶:用 Deeplearning4j 打造工业级推荐引擎

Java 程序员的 AI 进阶:用 Deeplearning4j 打造工业级推荐引擎

文章目录 * 🎯 Java 程序员的 AI 进阶:用 Deeplearning4j 打造工业级推荐引擎 * 📊 1. 为什么 Java 依然是 AI 工程化的“定海神针”? * 🧬 1.1 内存管理的“物理隔离” * 🛡️ 1.2 工业级生态的无缝闭环 * 🌍 2. 数据预处理:AI 模型的“洗经伐髓” * 🧬 2.1 特征工程的“物理建模” * 📊 推荐数据流转对比表: * 🔄 3. ND4J 内核:压榨 JVM 的每一分算力 * 🧬 3.1 堆外内存与 BLAS 加速 * 🏗️ 4. 代码实战:用 DL4J 构建神经网络推荐器 (Neural CF)

By Ne0inhk
JSP技术入门指南【一】利用IDEA从零开始搭建你的第一个JSP系统

JSP技术入门指南【一】利用IDEA从零开始搭建你的第一个JSP系统

Jsp技术入门指南【一】利用IDEA从零开始搭建你的第一个JSP系统 * 前言 * 一、什么是JSP * 1.1 JSP是干什么的? * 1.2 JSP与Servlet的关系是什么? * 二、在Idea中创建第一个JSP系统 * 三、JSP和HTML的差别 * 3.1 格式区别 * 3.2 注释区别 前言 * 在前面的内容中,我们已经系统学习了 Web 开发的基础技术:从构建网页骨架的 HTML、美化页面的 CSS,到实现服务器端逻辑的 Java Servlet。 * 这些知识为我们打开了动态 Web 开发的大门,让我们能够通过 Servlet 处理客户端请求、操作数据库并返回动态数据。 * 然而,在 Servlet 中直接拼接 HTML 代码实现页面渲染时,代码往往显得繁琐且难以维护 —— 有没有一种更简洁、更直观的方式,

By Ne0inhk
Java 大视界 -- 基于 Java+Kafka 构建高可用消息队列集群:实战部署与性能调优(442)

Java 大视界 -- 基于 Java+Kafka 构建高可用消息队列集群:实战部署与性能调优(442)

Java 大视界 -- 基于 Java+Kafka 构建高可用消息队列集群:实战部署与性能调优(442) * 引言: * 正文: * 一、 Kafka 高可用集群核心认知:先懂原理,再谈部署 * 1.1 Kafka 高可用核心原理 * 1.1.1 核心组件协同逻辑 * 1.1.2 高可用核心:多副本与 Leader 选举机制 * 1.2 Kafka 高可用集群架构设计要点 * 1.3 技术栈选型:Java+Kafka 核心版本适配 * 二、 实战部署:Java+Kafka 高可用集群搭建 * 2.1 部署前准备:环境初始化

By Ne0inhk