Hel*_*ium 16 python apache webserver
这里简单的Web服务器意味着处理简单HTTP请求的服务器,如下所示:
import BaseHTTPServer
class WebRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(self):
if self.path == ‘/foo’:
self.send_response(200)
self.do_something()
else:
self.send_error(404)
def do_something(self):
print ‘hello world’
server = BaseHTTPServer.HTTPServer((’127.0.0.1?,8080), WebRequestHandler)
server.serve_forever()
Run Code Online (Sandbox Code Playgroud)
尽管处理POST,PUT,DELETE方法的请求,这个简单的服务器与Apache Web Server有什么区别?或者换句话说,如果我想使用python实现可以投入使用业务的服务器,我该怎么办?
如果显示Apache Server的大图,我将不胜感激.
nin*_*cko 12
或者换句话说,如果我想使用python实现可以投入使用业务的服务器,我该怎么办?
已经存在基于python的Web服务器,例如CherryPy(我认为它是与Apache在同一堆栈级别上的Web服务器解决方案;但它更基于python,并且Apache已经存在了很长时间).
如果你想从头开始编写一个轻量级的非常简单的web服务器,那么使用BaseHTTPServer可能没什么问题,除了一些突出的设计问题(我听说竞争条件可能永久地阻塞套接字直到线程死掉).
虽然我不推荐它(单独)用于商业,但是一些大男孩使用BaseHTTPServer和一些额外的机器:http://www.cherrypy.org/browser/trunk/cherrypy/_cphttpserver.py? ev = 583
详细说明,Apache是行业标准.它有很多配置选项,安全团队,我认为的漏洞邮件列表等.它支持模块(例如mod_python).基于Python的Web服务器也支持基于python的模块(也许它们可能允许您访问非python的东西)通过一个称为WSGI堆栈的东西; 一个WSGI应用程序可以运行在任何基于python的Web服务器上(也是Apache,也有一个modwsgi); 我认为它们的范围比Apache模块窄.
Apache模块示例:http://httpd.apache.org/docs/2.0/mod/
WSGI示例(不是有效的比较):http://wsgi.org/wsgi/Middleware_and_Utilities
如果我正在做一些非常轻量级的事情,或者我需要对模块接口无法提供的webserver内部进行大量控制,或者我正在做个人项目,我可能会编写自己的网络服务器代码.除非我对现实世界的Web服务器的工作方式有丰富的经验,否则我不会为自己的服务器编写代码.从安全漏洞的角度来看,这一点尤为重要.
例如,我曾经写过一个基于网络的音乐播放器.我使用BaseHTTPServer从我编写的沙箱中提供音乐,以确保人们无法访问任意文件.线程是一场噩梦.(我记得你需要向Popen传递特殊参数的一个错误,因为线程导致了一个隐式的fork会导致悬挂在悬空文件描述符上.)还有其他各种问题.代码需要重构很多.这对于个人项目来说非常值得,但对于只需要网站的企业而言,这是一项重要的工作,并不值得.
我知道有两家创业公司过去使用Pylons(使用Paste)或Turbogears(使用CherryPy),如果你正在寻找一个轻量级的python web服务器堆栈.他们缺乏默认的模板系统.Apache和更精简的基于python的Web服务器之间的选择也可能取决于您的共同开发人员的技能.
Apache Web服务器知道并支持整个HTTP协议,因此它可以处理与标头有关的所有复杂情况,保持连接打开,缓存内容,所有不同的HTTP响应代码及其正确的处理等.
您必须了解整个HTTP协议并在代码中表达它以超越简单的HTTP服务器.
| 归档时间: |
|
| 查看次数: |
9042 次 |
| 最近记录: |