gpt4 book ai didi

python - 简单的网络服务器和 Apache 服务器有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 16:53:48 27 4
gpt4 key购买 nike

这里的simple webserver是指处理简单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()

尽管处理 POST、PUT、DELETE 方法的请求,这个简单的服务器与 Apache Web Server 有什么区别?或者换句话说,如果我想用python实现一个可以投入业务使用的服务器,我还应该怎么做?

如果显示 Apache Server 的大图,将不胜感激。

最佳答案

Or in other words, if i want to use python to implement a server which can be put into use of business, what also should i do?

已经有基于 python 的网络服务器,例如 CherryPy(我认为它旨在成为与 Apache 处于同一堆栈级别的网络服务器解决方案;虽然它更基于 python,并且 Apache 已经存在了很多更长)。

如果你想从头开始编写一个轻量级的非常简单的网络服务器,使用 BaseHTTPServer 可能没有任何问题,除了一些突出的设计问题(我听说竞争条件可能会永久阻塞套接字直到线程死亡)。

虽然我不会(单独)推荐它用于商业,但一些大人物使用 BaseHTTPServer 和一些额外的机器: http://www.cherrypy.org/browser/trunk/cherrypy/_cphttpserver.py?rev=583

详细来说,Apache 是行业标准。它有大量的配置选项、一个安全团队、我认为的漏洞邮件列表等。它支持模块(例如 mod_python)。基于 Python 的 Web 服务器还通过称为 WSGI 堆栈的东西支持基于 Python 的模块(也许它们可能允许您访问非 Python 的东西); WSGI 应用程序可以在任何基于 python 的 Web 服务器上运行(还有 Apache,它也有一个 modwsgi);我认为它们的范围比 Apache 模块更窄。

Apache 模块示例:http://httpd.apache.org/docs/2.0/mod/

WSGI 示例(不是有效比较):http://wsgi.org/wsgi/Middleware_and_Utilities

如果我正在做一些非常轻量级的事情,或者如果我需要对模块接口(interface)无法提供的网络服务器内部进行大量控制,或者如果我正在做一个个人项目,我可能会编写自己的网络服务器。除非我对真实世界的 Web 服务器的工作方式有丰富的经验,否则我不会为企业编写自己的服务器代码。从安全漏洞的角度来看,这一点尤为重要。

例如,我曾经写过一个基于网络的音乐播放器。我使用 BaseHTTPServer 从我编写的沙箱中提供音乐服务,以确保人们无法访问任意文件。线程是一场噩梦。 (我记得有一个错误,您需要将特殊参数传递给 Popen,因为线程会导致隐式 fork ,这会导致悬空文件描述符挂起。)还有其他各种问题。代码需要重构很多。对于个人项目来说,这可能是非常值得的,但对于只需要一个网站的企业来说,这是一项重大的事业,不值得。

我认识两家初创公司,如果您正在寻找轻量级 Python Web 服务器堆栈,他们过去一直满足于使用 Pylons(使用 Paste)或 Turbogears(使用 CherryPy)。他们的默认模板系统虽然缺乏。在 Apache 和更精简的基于 Python 的 Web 服务器之间做出选择也可能取决于您的合作开发人员的技能组合。

关于python - 简单的网络服务器和 Apache 服务器有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5693741/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com