如何在 Linux 上用 C/C++ 编写 Web 服务器 [关闭]
Posted
技术标签:
【中文标题】如何在 Linux 上用 C/C++ 编写 Web 服务器 [关闭]【英文标题】:How do I write a web server in C/C++ on linux [closed] 【发布时间】:2010-02-26 00:46:44 【问题描述】:我正在考虑在 linux 平台上开发一个小型(阅读:初级)网络服务器,但我不知道从哪里开始。
我希望它能够做的是:
监听特定端口 接受 HTTP 发布并获取请求 适当回应 无需会话管理 必须使用 C 或 C++ 必须在启动时作为服务运行我熟悉 HTTP 标头,并且是一位经验丰富的 php 和 .Net Web 开发人员,但我不知道从哪里开始这项任务。
您能否建议我提供一些资源来弥补学习曲线?
【问题讨论】:
在启动时运行与您的编程语言没有任何关系,您所要做的就是使其在 [programname] start 时可运行并在 [programname] stop 时可停止,然后将其安装到/etc/init.d 或 /etc/rc.d/ 或其他。 谢谢 Brendan,您能解释一下(或提供链接)在这种情况下您所说的“可运行”是什么意思吗? Brendan 试图解释一个 Unix 守护进程,它类似于 MS-Windows 下所谓的服务。参考(带代码片段):netzmafia.de/skripten/unix/linux-daemon-howto.html 如果这将是一个面向互联网的服务器,你不应该自己编写。它将受到攻击。现有的 HTTP 服务器包含许多经验教训。 我讨厌近距离投票,因为编写一个简单的网络服务器是我在学校时最喜欢的练习之一......唯一的方法是直接投入 - 创建 myserver.c,打开一个监听套接字,编译,运行并将浏览器指向它。走着瞧吧。迭代。 【参考方案1】:从上到下,您需要了解:
HTTP 协议 TCP 服务器 - BSD 套接字编程 编写一个基本的 Unix 守护进程(持久服务) 进程管理(分叉) 解析文本(读取配置文本文件) 文件处理 (I/O) 调试 C/C++ 编程:)因此,您必须学习编写基本的 Unix 应用程序、用于 TCP/IP 网络编程的 BSD 套接字编程以及 HTTP 协议。
常用的文字有:
Unix 应用开发:
Unix 环境中的高级编程,Stevens & Rago 高级 Unix 编程TCP/IP(套接字)编程:
Unix 网络编程,第 1 卷 Stevens 等 TCP/IP 图解,史蒂文斯 Ineternetworking with TCP/IP, Volume 3, ComerHTTP 协议
RFC 包括 RFC 2616 用于 HTTP v1.1, RFC 2068 用于 v1.1 之前的版本 加上其他取决于支持(压缩、URI/URL)和完整性【讨论】:
嗯,严格来说,配置文件的解析和分叉不是必须的。【参考方案2】:对于 SIMPLE/BASIC/ULTRA-LIGHT HTTP 服务器,程序流程应该是这样的(伪代码):
----Main thread----
Load settings
while true do
Wait for connection
Connection received, create a new thread and transfer this connection to this thread.
end
----Connection thread----
Analyze request
if dynamic content do
Dump the HTTP request and send it to the interpreter
Wait for response from the interpreter
Read response header from the interpreter
Stream response
else if static content do
Load requested file
Stream file content
end
(Optional) Cache the response if size < X
Send the response
Close the socket
所以你应该学习线程、进程间通信(如果你想与解释器交互)、套接字编程和 HTTP 协议。
【讨论】:
【参考方案3】:这里无法解释所有细节 访问http://www.linuxhowtos.org/C_C++/socket.htm,使用 C 创建基本服务器。 IBM 的另一个:http://www.ibm.com/developerworks/systems/library/es-nweb/index.html
【讨论】:
【参考方案4】:您总是可以从现有的代码库开始。 boa 可能是一个开始,因为它很小,用 C 语言实现,适合您的“开机启动”要求;细节是例如在 Debian / Ubuntu 软件包中。
【讨论】:
【参考方案5】:http://en.wikipedia.org/wiki/Comparison_of_lightweight_web_servers
再次感谢***
顺便说一句 - 你可能想谷歌“嵌入式网络服务器开源”
(www).ibm.com/developerworks/web/library/wa-ltwebserv/
【讨论】:
链接失效【参考方案6】:使用 libevent 库,你可以用 40 行 c 代码编写一个 Web 服务器。
http://www.ruilog.com/article/view/5249.html
如果您想从头开始创建它,那么您可以参考用 c 编写的开源网络服务器,例如 lighttpd、apache、nginx。
【讨论】:
链接断开。错误 404以上是关于如何在 Linux 上用 C/C++ 编写 Web 服务器 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
在 Linux 上用 c++ 编写类似 pexpect 的程序