当前位置: 首页 > news >正文

使用Socket编写超牛的http服务器和客户端(一)

实现一个高性能的基于 IOCP(I/O Completion Ports)的 HTTP 服务器,支持多线程、动态线程池调整和路由处理。

主要功能和特性
IOCP 模型:
使用多个 IOCP 句柄(IOCP_COUNT),将客户端连接均匀分配到不同的 IOCP 上,减少线程竞争。
工作线程使用 GetQueuedCompletionStatus 异步处理 I/O 操作。

线程池动态调整:
根据活动连接数动态调整工作线程数量。
当活动连接数超过 workerThreadCount * 1000 时,会创建新的工作线程。

HTTP 请求解析:
使用状态机解析 HTTP 请求,支持解析请求行、请求头和请求体。
状态机包括 REQUEST_LINE、HEADERS、BODY 和 COMPLETE 四个状态。

路由处理:
支持 GET、POST、PUT 和 DELETE 请求。
路由表通过 std::unordered_map 实现,键为 方法 + 路径,值为处理函数。

内存池:
使用 MemoryPool 管理 ClientContext 对象,避免频繁的内存分配和释放。
日志输出:

在控制台输出服务器状态、客户端连接和错误信息。

文件结构
IOCPHttpServer/

相关文章:

  • L1-6 剪切粘贴(字符串增删查改)
  • INTJ人格的本质
  • 【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter21-错误处理与调试
  • Linux 命令大全完整版(12)
  • apply的用法
  • 自动驾驶中planning为什么要把横纵向分开优化?
  • AI知识架构之RAG
  • 如何在VMware虚拟机的window10系统中安装网易mumu模拟器
  • Linux权限(一)
  • 【Java】求绝对值
  • hive开窗函数边界值ROWS BETWEEN 和 RANGE BETWEEN区别
  • 【带你 langchain 双排系列教程】6.LangChain多模态输入与自定义输出实战指南
  • 机器学习数学通关指南——链式法则
  • Three.js轮廓线、边框线、选中效果实现的几种实现方法以及性能评估
  • Lock-Free环形队列C++实现
  • C进阶 自定义类型
  • 计算机性能指标
  • list结构刨析与模拟实现
  • 【p-camera-h5】 一款开箱即用的H5相机插件,支持拍照、录像、动态水印与样式高度定制化。
  • STM32——HAL库开发笔记22(定时器3—呼吸灯实验)(参考来源:b站铁头山羊)
  • 库里22分赢下抢七大战,火箭10年难破“火勇大战”的魔咒
  • 日本政府强烈反对美关税政策并要求其取消
  • 首部关于民营经济发展的基础性法律,有何亮点?专家解读
  • 近七成科创板公司2024年营收增长,285家营收创历史新高
  • 航海王亚洲巡展、工厂店直销……上海多区推出“五五购物节”活动
  • 揭秘神舟十九号返回舱“软着陆”关键:4台发动机10毫秒内同时点火