【问题标题】:What's difference between a simple webserver and Apache server?简单的网络服务器和 Apache 服务器有什么区别?
【发布时间】:2011-08-07 07:34:47
【问题描述】:

这里的简单网络服务器是指处理简单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 的大图,将不胜感激。

【问题讨论】:

  • 既然可以自己组装滑板,为什么还要买车?
  • 因为有一天我想自己造车:)

标签: python apache webserver


【解决方案1】:

或者换句话说,如果我想用python实现一个可以用于业务的服务器,我还应该怎么做?

已经有基于 python 的 Web 服务器,例如 CherryPy(我认为它旨在成为与 Apache 相同堆栈级别的 Web 服务器解决方案;不过它更基于 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

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

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

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

【讨论】:

  • 我知道已经很久了,但我偶然发现了你的答案,你为cherryPy提供的链接给出了404
【解决方案2】:

Apache 是用 C 语言编写的,旨在实现可扩展性,而 BaseHTTPServer 则适用于本地/测试/调试环境。

因此,您不应将 BaseHTTPServer 用于任何生产站点。

【讨论】:

  • 谢谢,它直接且易于理解。但我想知道更多关于他们在技术上的差异的细节。
【解决方案3】:

Apache Web 服务器了解并支持整个 HTTP 协议,因此它可以处理与标头、保持连接打开、缓存内容、所有不同的 HTTP 响应代码及其正确处理等有关的所有复杂问题。

您必须了解整个 HTTP 协议并用代码表达它才能超越简单的 HTTP 服务器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 2011-03-10
    • 2018-07-17
    • 2019-05-16
    • 2019-02-26
    • 1970-01-01
    相关资源
    最近更新 更多