当前位置: 首页 > 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站铁头山羊)
  • 国家数据发展研究院在京正式揭牌
  • 胃病、闭经、湿疹、失明:藏在疾病后的情绪问题
  • 文旅部:今年一季度国内出游人次17.94亿,同比增长26.4%
  • 山西省朔州市政府党组成员、副市长李润军接受审查调查
  • 马上评丨超常设置战略急需专业,意味着什么
  • 2024年我国数字阅读用户规模达6.7亿