httplib
httplib API 作用 httplib::Server 创建 HTTP 服务器 server.Get() 注册 GET 路由 server.Post() 注册 POST 路由 server.Put() 注册 PUT 路由 server.Delete() 注册 DELETE 路由 server.Options() 注册 OPTIONS 路由 server.listen() 启动服务器 Request 客户端请求 req.path URL 路径 req.method HTTP 方法 req.body 请求正文 req.headers 请求头 req.get_param_value() 获取 URL 参数 req.get_header_value() 获取 Header Response 服务器响应 res.status HTTP 状态码 res.body 响应正文 res.set_content() 返回内容 res.set_header() 设置响应头 set_chunked_conten...
12.optional和variant
std::optional表示 一个值 存在 或 不存在,给单个类型做“可空标记“。 头文件:<optional> 有值:存储一个 T 类型对象 无值:空状态(std::nullopt) 1. 基础应用场景可以用作成员变量类型,类中某些属性可选但非必选,不用默认值占位(-1,0等特殊值标识无效),语义更清晰。 示例: 12345678class AgentMessage{ private: std::string message_id_; std::optional<std::string> context_id_; std::optional<std::string> task_id_;}; 这是一个agent消息体的示例。 message_id_:必填消息唯一标识 context_id_/task_id_:可选,代表上下文 ID、任务 ID,不存在则置 std::nullopt 2. 判断是否有值两种写法等价: 12345678910if (opt1.has_value()...
1.Docker-简介
Docker核心概念与实战指南1.Docker基础概念 Docker概述:Docker是一种成熟高效的软件部署技术,利用容器化技术为应用程序封装独立的运行环境,每个运行环境即为一个容器,承载容器运行的计算机称为宿主机。 容器与虚拟机的区别: Docker容器:多个容器共享同一个系统内核。 虚拟机:每个虚拟机包含一个操作系统的完整内核。 优势:Docker容器比虚拟机更轻量、占用空间更小、启动速度更快。 镜像(Image): 定义:镜像是容器的模板,可类比为软件安装包。 类比:类似于制作糕点的模具,可用于创建多个糕点(容器),并可分享给他人。 容器(Container): 定义:容器是基于镜像运行的应用程序实例,可类比为安装好的软件。 类比:类似于模具制作出的糕点。 Docker仓库(Registry): 定义:用于存放和分享Docker镜像的场所。 Docker Hub:Docker的官方公共仓库,存储了大量用户分享的Docker镜像。 2.Docker安装 运行环境:Docker通常基于Linux容器化技术,在Windows和Mac电脑上,Docker通过虚拟...
3.Linux绝对路径与相对路径
Linux 绝对路径与相对路径在 Linux 树形目录结构中,路径就是定位文件 / 目录的 “地址”,绝对路径和相对路径是两种定位方式,核心区别在于起始点不同。 一、绝对路径1. 定义从 根目录 / 出发的完整路径,相当于 “从城市原点出发的详细地址”。 2. 核心特征 路径开头必须是 / 唯一性:无论当前在哪个目录,绝对路径都能精准定位目标 稳定性:适合写脚本、配置文件(不会因当前目录变化而出错) 3. 示例 目标位置 绝对路径 普通用户主目录 /home/zhangsan 系统用户配置文件 /etc/passwd Nginx 配置文件 /etc/nginx/nginx.conf 临时文件目录 /tmp 二、相对路径1. 定义从 当前所在目录 出发的简化路径,相当于 “从你现在站的位置出发的路线”。 2. 核心特征 路径开头不是 / 相对性:同一个目标,在不同目录下的相对路径不同 便捷性:手动操作时输入更短 3. 关键特殊符号这两个符号是相对路径的核心,必须牢记: 符号 含义 示例 . 代表当前目录 ./a.out → 当前目...
2.Linux目录
Linux 目录结构详解(通俗版)Linux 采用 树形目录结构,所有文件和目录都挂在根目录 / 下,就像一棵大树从根部长出所有枝干。理解目录结构的核心是记住:每个目录都有明确的分工,存放特定类型的文件。 一、根目录 /所有目录的 “祖宗”,Linux 系统的起点。所有文件和子目录都直接或间接存放在根目录下。 注意:根目录 / 和用户主目录 ~ 是两回事,~ 一般是 /home/用户名。 二、核心目录功能速查表 目录路径 通俗名称 存放内容 一句话总结 /bin 二进制命令目录 系统最基础的命令(如 ls、cp、mv、cat) 普通用户和 root 都能执行的核心命令 /sbin 系统命令目录 系统管理命令(如 ifconfig、reboot、fdisk) 只有 root 用户才能执行的命令(管理系统用) /home 用户主目录 普通用户的个人文件夹(如 /home/zhangsan) 每个用户的 “私人空间”,存自己的文件和配置 /root 管理员主目录 root 用户的个人文件夹 相当于 root 用户的 ~,普通用户无权访问 /etc 配置文件...
1.Linux内核
Linux内核一、进程调度子系统(Process Scheduler)1. 核心职责进程调度子系统是内核的 “CPU 资源分配器”,负责决定哪个进程 / 线程在哪个 CPU 核心上**何时运行 **,核心目标是: 公平性:所有进程都能获得合理的 CPU 时间片; 高效性:最大化 CPU 利用率,减少进程切换开销; 响应性:保证交互式进程(如终端、GUI 程序)的快速响应。 2. 核心概念与机制(1)进程状态内核通过 task_struct 结构体的 state 字段描述进程状态,关键状态包括: 状态 含义 TASK_RUNNING 运行态 / 就绪态:进程正在 CPU 上运行,或在就绪队列等待调度 TASK_INTERRUPTIBLE 可中断睡眠态:进程等待某事件(如 IO 完成、信号),可被信号唤醒 TASK_UNINTERRUPTIBLE 不可中断睡眠态:进程等待硬件事件(如磁盘 IO),不能被信号唤醒,避免硬件操作被打断 TASK_ZOMBIE 僵尸态:进程已终止,但父进程未调用 wait 回收其资源,task_struct ...
muduo结构图
核心事件流转完整流程图(从监听连接到数据收发)123456789101112131415161718192021222324252627282930313233343536启动TcpServer │ ▼创建Acceptor → 绑定baseLoop(主EventLoop) → 创建listenfd → socket/bind/listen │ ▼Acceptor创建AcceptorChannel(绑定listenfd) → 注册到baseLoop的Poller │ ▼baseLoop进入EventLoop::loop() → Poller调用epoll_wait监听listenfd的可读事件 │ ▼客户端发起连接 → listenfd触发可读事件 │ ▼Poller将AcceptorChannel加入activeChannels_ → EventLoop处理Channel回调 │ ▼Acceptor执行accept() → 获取新连接connfd → 创建TcpConnection实例 │ ...
原代码解析
源代码地址:https://gitee.com/lpzdinghai/lpzmuduo 一、整体架构:主从 Reactor 架构整个库的核心是主 Reactor(mainLoop)+ 从 Reactor(subLoop) 的多线程架构,目的是将连接监听和数据读写解耦,充分利用多核 CPU,提升并发处理能力。 架构核心分工 角色 所属线程 核心作用 核心组件 主 Reactor 主线程(main) 监听客户端新连接、分配连接 Acceptor + mainLoop 从 Reactor 工作线程(sub) 处理已建立连接的所有 IO 事件 EventLoopThreadPool + subLoop 连接管理 跨线程 维护 TCP 连接的生命周期 TcpConnection + Channel IO 复用 所有 EventLoop 监听 fd 事件并上报 Poller(EPollPoller) 线程管理 主线程 管理工作线程,创建 subLoop EventLoopThreadPool + Thread 架构核心思想 主线程只做最轻量化的连接监听,不处理任...
day21-编译安装脚本和测试代码
autobuild.sh这是一个自动编译 + 自动安装muduo的一键部署脚本 12345678910111213141516171819202122232425262728293031#!/bin/bashset -e# 如果没有build目录,创建该目录if [ ! -d `pwd`/build ]; then mkdir `pwd`/buildfirm -rf `pwd`/build/*cd `pwd`/build && cmake .. && make# 回到项目根目录cd ..# 把头文件拷贝到 /usr/include/mymuduo so库拷贝到 /usr/lib PATHif [ ! -d /usr/include/lpzmuduo ]; then mkdir /usr/include/lpzmuduofifor header in `ls *.h`do cp $header /usr/include/lpzmuduodonecp `pwd`/lib/liblpzmuduo.so /usr/l...
day20-TcpServer+TcpConnection
TcpServer + TcpConnection 完整联动流程图12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364【TcpServer 启动】 ↓1. TcpServer 构造 ├─ 创建 Acceptor(监听socket) └─ 创建 EventLoopThreadPool 线程池 ↓2. TcpServer::start() ├─ 启动IO线程池 └─ Acceptor::listen() 开启监听 + 绑定accept回调 ↓【新连接到达】3. 客户端连接 → 监听fd触发读事件 ↓4. Acceptor::handleAccept() ├─ accept 拿到 客户端connfd └─ 回调 TcpServer::newConnection ↓5. TcpServer::newConnection() ├─ 1....