尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

使用Sender和io_uring改造Webserver

使用Sender和io_uring改造Webserver
📅 发布时间:2026/6/20 2:03:38

前言

我以前有写过一个练手玩具,参考 tinywebserver
当然那时候我稍微改了下,改成了主从 Reactor 和 epoll
不过那时候感觉最后实现的有线程问题,查了半天没查出来红温了,索性加了一把大锁
最近读了下 Sender 模型,正好之前也写了个 coroutine primitive,于是拿来练手

参考资料

虽然 C++26 上通过了 execution,但是参考资料还是非常非常少
由于我还是想从底层开始,所以不考虑网络库(不如说用网络库就没什么工作量了),直接从标准的 stdexec 开始
阅读前,需要先对网络编程,异步,IO,以及最好对协程有一些了解
提案就不放了,太长了我也没仔细看
参考之一:execution 的设计
参考之二:execution 的构造例(这是系列最后一篇)
参考之三:重点,我写的也是基于这个封装(另外,这个作者也是上面那个翻译者,有点巧了)

上述参考中有一些引用,建议都先看一看,毕竟参考资料太少了
gpt 和 claude 的支持都不怎么样,这个时候建议直接把觉得不错的参考代码喂给 ai
由于终版的 P2300 提案中已经去掉了 tag_invoke,改成了成员函数,读源码时需要适当注意下,目前 stdexec 中应该是两种都有?

关于io_uring,看起来虽然只有三个 syscall,但是结合多线程会出现非常多神秘问题,所以就不用裸的,统一用liburing

改写目标

基本上我们要改写的部分是:threadpool 和 HTTP connection,分别对应两个部分
但是由于 execution 提出了非常神的 context 这一概念,我们实际上需要首先写个 scheduler,然后基于这个去写 sender
异步IO的部分,原则上也是需要包在 sender 里的,所以又回来了
我之前读各种资料和源码,读了差不多5天,一直下不去手,后面读到那篇 blog 才好起来

一些注意的地方

首先需要熟悉 sender 这一套方法,sender factory {| sender adaptor} | sender consumer
sender factory 的话,基本上就是 just 或者 schedule(scheduler) 起手
中间是若干个处理,注意执行流程其实就是里面的 lambda,写起来和同步是一样的,基本上就是 let_value 或者 then
最后的 consumer,理论上全局只要写一个 sync_wait 就行了
如果需要循环可以直接 return false 然后接 repeat_effect_until
然而如果报错了,就有早年模板元报错的美了,还加上了 lambda closure 的美,不过总之现代报错都有行标和颜色,只读 error 读起来也能读

实现

关于服务器本身倒没什么好讲的,毕竟 parser 之类的代码都能复用
我还稍微改了下写路径,因为都是静态资源,所以可以直接走 sendfile
这里花了一天多一点
先是写了个基于线程池的版本,然后想一想我都写 sender 了怎么还在显式线程池,这不对吧
于是改了下,改成每个线程有独立的 io_uring 示例,约等于重写,花了两天
然后发现 Ctrl+C 停不下来,于是仔细研读那篇 blog,又适当的重写了一部分才修好
到这里花了两天,基本功能都有了
压测发现到10k并发的时候会出现大量的失败,加了个最大连接数限制后好一点但不多,懒得修了
然后准备加上 timer 和 keep-alive,又花了一天,
之后准备实现

一切伟大的行动和思想,都有一个微不足道的开始。
There is a negligible beginning in all great action and thought.

相关新闻

  • 如何在Renpy尝试中调整人物和背景图像大小
  • 如何安装claude code以及ccr code
  • 代码托管平台

最新新闻

  • 【FFmpeg】ffmpeg 命令行参数 ⑨ ( 使用 ffmpeg 进行音视频流处理 | 视频裁剪 / 缩放 / 旋转 / 水印 | 音频降噪 / 混音 / 格式转换 )
  • 3分钟学会:Rufus启动盘制作完整指南
  • 2026年6月宏宇陶瓷耐用吗,宏宇陶瓷,宏宇陶瓷怎么样 - 品牌推荐师
  • 2026年6月山东考察:不割韭菜的罐罐酸奶加盟项目,谷物全书为何获推荐? - 品牌鉴赏官2026
  • 2026邯郸2026正规漏水检测维修公司精选口碑榜TOP5权威推荐-精准定位检测漏水点-专业防水补漏堵漏维修、卫生间/厨房/屋顶/天沟/地下室/阳台防水漏水检测维修 - 安佳防水
  • MC9S12KG128电气特性深度解析:从数据手册到可靠硬件设计

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号