我对Web服务器的基本原理感兴趣,比如Apache或Nginx,所以现在我正在开发自己的服务器。是否可以直接从文件写入套接字?
当我的服务器收到一个请求时,它正在搜索一个文件(例如index.html
),如果它存在 - 读取缓冲区中的所有内容(content
)并将其写入到套接字中。这里有一个简单的代码:
int return_file(char* content, char* fullPath) {
file = open(fullPath, O_RDONLY);
if (file > 0) { // File was found, OK
while ((nread = read(file, content, 2048)) > 0) {}
close(file);
return 200;
}
}
的问题很简单:是否有可能避免使用缓冲区并直接写入文件内容的插座?
感谢您的任何提示:)
我从来没有用过它,所以我不想写一个答案,但看一看['splice'](https://linux.die.net/人/ 2 /拼接)。这里的想法是做一个零拷贝传输,它至少可以节省将文件数据复制到用户空间的时间,然后再回到内核空间,然后到达插槽。您可以更多地了解零拷贝概念,并且有来自Linus的信息性电子邮件交换,在那里谈论“拼接”。我在这里与Linux交谈,不确定微软或其他人的作用是什么。 – yano
@yano'splice'非常酷且一般,但在将文件发送到套接字的特定情况下,我相信'sendfile'更容易,效率更高。 – rici
@rici啊是的,我同意,当然更容易。我的猜测是'sendFile'在引擎盖下使用'splice'(对于Linux而言),但我不知道。 – yano