在这里做了一些搜索后,我发现没有关于开发Web服务器的问题。
我主要是因为两个原因而这样做。作为一个侧面项目,并了解有关开发服务器程序的更多信息。这不会变成一个可用的应用程序,更像是一个学习工具
所以问题很简单。
欢迎链接到有用的网站,但不要链接到开源的工作项目,因为这是关于学习的过程。
答案 0 :(得分:17)
Web服务器最初只是一段非常简单的代码:
所以代码的大纲很简单。
现在,您需要处理一些复杂问题:
通过多种可能的选择,处理多个连接的可能性也相对容易。
运行程序实际上也相当容易。通常,您定义CGI目录的特殊路径;具有通过该目录的路径的URL然后将路径名称解释为程序的路径。然后,服务器将使用fork / exec创建子进程,并将STDOUT连接到套接字。然后程序运行,将输出发送到STDOUT,然后将其发送到客户端浏览器。
这是基本模式; Web服务器所做的一切只是为这个基本模式添加了多余的功能和附加功能。
以下是代码示例的其他一些来源:
它几乎不会影响你真正想要的东西,但是对于简单,它很难从this one中击败http://www.commandlinefu.com:
$ python -m SimpleHTTPServer
答案 1 :(得分:9)
首先,请不要让它成为一个可用的项目 - 获得Web服务器的安全性非常困难。
好的,请注意以下事项:
答案 2 :(得分:1)
网络等非常标准,所以不要太担心。 (在大多数语言中有几个“即时”的示例网络服务器。)
相反,专注于实际实现HTTP规范。你会惊讶于a)你不知道的东西和b)多少应该符合HTTP标准的东西,实际上并非如此,但是假它很好。
然后你会惊讶于网络的运作。
完成HTTP后,尽量尝试实施IMAP。
答案 3 :(得分:1)
几年前我在Python中编写了一个轻量级的网络服务器,也作为一个学习项目。
我能给出的最简单的建议,特别是作为一个学习项目,是构建一个有效的核心,然后是迭代设计。不要瞄准跳跃的月亮,开始非常小,然后添加特色,精炼和继续。我建议使用一个鼓励实验的工具,比如Python,你可以在这里同时输入和测试代码。
答案 4 :(得分:1)
我TAed的课程有代理任务,所以我可以在这里阐明一些,我想。
所以,你最终会做很多标题更改只是为了让你的生活更轻松。也就是说,HTTP / 1.0比HTTP / 1.1更容易处理。你不想处理管理超时和保持活动等事情。每个事务一个连接最简单。
你将要进行大量的解析。在C中解析是很难的。我建议你写一个像
这样的函数int readline(char *buff, int maxLen) {
while((c = readNextCharFromSocket(&s)) && c != '\n' && i < maxLen)
buff[i++] = c;
return i;
}
并且一次处理一行,这完全是因为最简单的方法是一次在一行上使用现有的C字符串函数。另外,记住行是\ r \ n分开的,标题以\ r \ n \ r \ n。
终止主要的难点是解析,只要你能读取文件,其他一切都会按预期工作。
对于调试,您可能希望打印出在传输中断时传递给标准的标题。
答案 5 :(得分:1)
local-web-server是用node.js编写的简单开发Web服务器的一个例子..它比python -m SimpleHTTPServer
更可靠,功能更多
答案 6 :(得分:0)
我正在考虑启动同一个项目,以便更好地学习Python。有BaseHTTPServer class这是一个非常好的起点。
答案 7 :(得分:0)
我已经开发了一个使用C语言运行(Html和PHP)的Web服务器 它不是那么复杂你应该知道如何使用TCP / IP套接字,Thread以处理多个请求,进程fork(你需要为php命令行执行创建一个子进程(我使用了execvp))
我认为最令人讨厌的部分是处理c语言中的字符串并在命令行中发送POST / GET请求。
祝你好运