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

Linux Reactor网络模型与高效http静态服务器构建

sendfile()说明

在HTTP服务器中,返回资源文件时可以使用sendfile函数来发送body部分,提高效率。 函数原型:

代码语言:javascript

AI代码解释

#include <sys/sendfile.h> ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count);

说明: sendfile在一个文件描述符和另一个文件描述符之间复制数据。由于这种复制是在内核中完成的,因此sendfile比读和写的组合更有效,后者需要在用户空间之间传输数据。 参数说明:

参数

含义

out_fd

为读取而打开的文件描述符,通常是文件的fd

in_fd

为写入而打开的文件描述符

out_fd

如果offset不为NULL,则它指向保存文件偏移量的变量,将从该变量开始从infd读取数据。如果偏移量为NULL,则从当前文件偏移量开始从in fd读取数据,并通过调用更新文件偏移量。

count

在文件描述符之间复制的字节数

返回值: 如果传输成功,则返回写入out_ fd的字节数。请注意,成功调用sendfile()可能会写入比请求更少的字节;如果存在未发送的字节,调用方应准备重试调用。传输失败返回负数。

错误代码:

错误码

含义

EAGAIN

已使用ONONBLOCK选择非阻塞I/O,sendfile需要写入阻塞。

EBADF

未打开输入文件进行读取,或未打开输出文件进行写入。

EFAULT

地址不正确。

EINVAL

描述符无效或已锁定,或者类似mmap的操作不可用于in_fd,或者计数为负。

EINVAL

out_ fd设置了O_APPEND。sendfile()当前不支持此操作。

EIO

从in_ fd读取时出现未指定错误。

ENOMEM

内存不足,无法从in_ fd读取。

EOVERFLOW

计数太大,该操作将导致超过输入文件或输出文件的最大大小。

ESPIPE

偏移量不为NULL,但输入文件不可搜索(2)。

4、HTTP常用的请求方法

方法

含义

GET

获取资源

POST

提交数据

PUT

更新数据

DELETE

删除数据

5、HTTP静态服务器

HTTP静态服务器可以基于Reactor,实现高并发,reactor的实现可参考上一篇:开启极速之旅:了解Linux网络设计中的Reactor模型与百万级并发实践

5.1 接收数据逻辑 -- recv

HTTP服务器接受请求时,不必接收完所有的数据才进行数据解析,可以读一部分数据先进行解析,再解析后面的数据。 可以按行解析,如HTTP请求时,可以先解析GET方法所在行的数据,里面就包含了请求资源的位置。

图片

5.2 发送数据逻辑 -- send

HTTP服务器返回数据和接收数据的类似,可以先发送http的头数据,再发送内容。 数据拷贝到自己的buffer,发送数据,发送完重新设置事件,设为读就绪。

http://www.jsqmd.com/news/813331/

相关文章:

  • 2026年口碑好的排烟风管/青岛除尘风管/青岛排烟风管/青岛镀锌风管高口碑品牌推荐 - 品牌宣传支持者
  • 2026进口艺术涂料哪个品牌好?进口艺术漆十大品牌厂家权威推荐 - 栗子测评
  • 基于CrewAI与RAG架构的法律智能体系统:从原理到落地实践
  • OpenClaw-Agent-Command-Center:构建AI智能体协同的集中式指挥中心
  • TruthX:通过表征编辑对抗大语言模型幻觉的轻量级方法
  • 2026年知名的发酵用黄豆饼粉/中温黄豆饼粉厂家对比推荐 - 品牌宣传支持者
  • MCP-SQLite:用自然语言操作数据库的AI助手实战指南
  • 大模型工具调用新范式:NeuroMCP协议详解与实战部署
  • 用Python从零复现TSDF:手把手教你用NumPy和Open3D重建3D模型
  • ARM架构TLB失效机制与TLBI VALE1OS指令详解
  • 从Arduino到32位MCU:chipKIT平台硬件升级与项目实战指南
  • 2026年热门的广东游艇EVA防滑垫/广东3M双面胶/广东游艇甲板防滑垫用户口碑推荐厂家 - 行业平台推荐
  • 2026年加厚310s不锈钢板/不锈钢板/耐腐蚀不锈钢板/沈阳镜面不锈钢板公司选择指南 - 行业平台推荐
  • 国产多模态新星CPM-Bee:开源、统一架构与未来蓝图全解析
  • CTF Misc实战:图片隐写核心手法与新型工具链解析
  • 技能检查工具:自动化环境依赖验证提升开发效率
  • 内容创作团队如何借助Taotoken调用多模型生成多样化文案
  • 基于ChatGPT与Mattermost构建企业级智能问答机器人:从RAG到生产部署
  • 2026年超薄321不锈钢管/316L不锈钢管/201不锈钢管厂家选择推荐 - 行业平台推荐
  • AD5933阻抗测量模块的“开箱”与深度评测:从22kΩ反馈电阻到AD8606运放缓冲电路
  • 从零掌握提示工程:结构化技能树与实战技巧全解析
  • 为何工业企业都选这家?东霸传动涡轮减速机源头厂家,齿轮减速机定制厂家,硬核实力获千家客户认证 - 栗子测评
  • 2026年4月可靠的大件运输公司推荐,大件运输/大件物流,大件运输服务商有哪些 - 品牌推荐师
  • OAuth回调路由动态分发:OpenClaw-Codex-OAuth-Routing-Kit核心原理与实践
  • 技术教育如何从工具操作转向思维培养:批判性思维与工程实践融合
  • 智能抠图怎么操作?2026年最全工具对比指南,一键去背景其实很简单
  • 2026年4月口碑好的制冷管门店口碑推荐,制冷管/制冷机组/冷库安装/医药阴凉库/保鲜柜/冷藏库,制冷管企业哪家靠谱 - 品牌推荐师
  • opencli-skill:构建可扩展的命令行技能库,提升开发效率
  • 国产多模态先锋:ChatGLM核心原理、实战场景与未来展望
  • 2026广东/佛山新一线陶瓷品牌有哪些?防脱落瓷砖品牌榜首介绍推荐 - 栗子测评