我主要是因为两个原因而这样做.作为一个侧面项目,并了解有关开发服务器程序的更多信息.这不会变成一个可用的应用程序,更像是一个学习工具
所以问题很简单.
>您开发了Web服务器吗? (不管用什么语言)
>你可以提供什么问题和其他好的技巧
解决方法
>在端口80上打开TCP / IP套接字
>虽然没有终止
>等待该套接字上的连接
>当有人向您发送HTTP标头时
所以代码的轮廓很简单.
现在,您需要处理一些复杂问题:
>在最简单的代码版本中,当您与一个浏览器通话时,其他所有浏览器都无法连接.您需要提出一些处理多个连接的方法.
>通常可以方便地发送除静态文件之外的东西(尽管第一个HTTP服务器就是这样做的),因此您需要能够运行其他程序.
处理多个连接的可能性也相对容易,有许多可能的选择.
>最简单的版本(再次,这是它最初的方式)是让侦听端口80的代码为该连接设置一个特定的套接字,然后分叉自己的副本来处理那个连接.该过程一直运行直到套接字关闭,然后终止.然而,这是相对昂贵的:一般来说,fork需要几十毫秒,因此限制了你运行的速度.
>第二种选择是创建一个轻量级进程 – 一个/ k /一个线程 – 来处理请求.
运行程序实际上也很容易.通常,您定义CGI目录的特殊路径;具有通过该目录的路径的URL然后将路径名称解释为程序的路径.然后,服务器将使用fork / exec创建子进程,并将STDOUT连接到套接字.然后程序运行,将输出发送到STDOUT,然后将其发送到客户端浏览器.
这是基本模式; Web服务器所做的一切只是为这个基本模式添加了多余的功能和附加功能.
以下是一些代码示例的其他来源:
> http://www.codeproject.com/KB/IP/Generic_TCP_IP_server.aspx
> http://cs.baylor.edu/~donahoo/practical/CSockets/textcode.html
> http://www.paulgriffiths.net/program/c/echoserv.php
> http://www.linuxhowtos.org/C_C++/socket.htm
它几乎没有你真正想要的东西,但简单来说,很难从http://www.commandlinefu.com击败this one:
$python -m SimpleHTTPServer