news 2026/5/14 5:24:04

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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,发送数据,发送完重新设置事件,设为读就绪。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/14 5:22:06

Speclock:基于时间规则的分布式锁,实现定时任务精准互斥

1. 项目概述&#xff1a;一个为特定场景而生的“时间锁”最近在折腾一个分布式任务调度系统时&#xff0c;遇到了一个挺有意思的问题&#xff1a;如何确保一个关键任务在集群的多个节点上&#xff0c;同一时刻只有一个节点能执行&#xff1f;听起来像是分布式锁的经典场景&…

作者头像 李华
网站建设 2026/5/14 5:18:05

轻量级可组合Web框架Swiz:基于依赖注入的模块化架构实践

1. 项目概述&#xff1a;一个轻量级、可组合的Web框架在构建现代Web应用时&#xff0c;我们常常面临一个选择&#xff1a;是选择一个功能齐全但可能略显臃肿的全栈框架&#xff0c;还是自己动手&#xff0c;将多个独立的、功能专一的库组合起来&#xff1f;前者开箱即用&#x…

作者头像 李华
网站建设 2026/5/14 5:18:03

MEMHD框架:内存高效的多中心超维计算技术解析

1. MEMHD框架&#xff1a;内存高效的多中心超维计算革命超维计算&#xff08;Hyperdimensional Computing, HDC&#xff09;正逐渐成为边缘智能设备中的一颗新星。这种受大脑启发的计算范式&#xff0c;通过将数据表示为成千上万维的超向量&#xff08;通常维度在10,000左右&am…

作者头像 李华