В чем разница между простым веб-сервером и сервером Apache? - PullRequest
16 голосов
/ 17 апреля 2011

Здесь под простым веб-сервером понимается сервер, который обрабатывает простой 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.

Ответы [ 3 ]

12 голосов
/ 17 апреля 2011

Или, другими словами, если я хочу использовать python для реализации сервера, который можно использовать в бизнесе, что я должен делать?

Уже есть python-основанные на веб-серверах, такие как CherryPy (который, я думаю, предназначен для решения веб-сервера на том же уровне стека, что и Apache; хотя он более основан на Python, и Apache существует намного дольше).

Если вы хотите написать легкий и простой веб-сервер с нуля, вероятно, нет ничего плохого в использовании BaseHTTPServer, за исключением, возможно, нескольких нерешенных проблем проектирования (я слышал, что условия гонки могут навсегда засорить сокет, пока поток не умрет).

Хотя я бы не рекомендовал его (в одиночку) для бизнеса, некоторые из больших мальчиков используют BaseHTTPServer с небольшим количеством дополнительного оборудования: http://www.cherrypy.org/browser/trunk/cherrypy/_cphttpserver.py?rev=583

Для уточнения Apache является отраслевым стандартом.Он имеет множество параметров конфигурации, группу безопасности, списки рассылки об уязвимостях и т. Д. Он поддерживает модули (например, mod_python).Веб-серверы на основе Python также поддерживают модули на основе Python (возможно, они могут дать вам доступ к не-Python вещам) через нечто, называемое стеком WSGI;WSGI-приложение может работать на любом веб-сервере на основе Python (и Apache тоже, у которого также есть modwsgi);Я думаю, что они имеют более узкую область действия, чем модули Apache.

Примеры модулей Apache: http://httpd.apache.org/docs/2.0/mod/

Примеры WSGI (недопустимое сравнение): http://wsgi.org/wsgi/Middleware_and_Utilities

Я мог быкодируйте свой собственный веб-сервер, если я делаю что-то чрезвычайно легкое, или если мне нужен массивный контроль над внутренними компонентами веб-сервера, которые интерфейсы модуля не могут обеспечить, или если я делаю личный проект.Я бы не стал кодировать свой собственный сервер для бизнеса, если бы у меня не было значительного опыта работы реальных веб-серверов.Это особенно важно с точки зрения уязвимости в безопасности.

Например, я однажды написал музыкальный проигрыватель на основе Интернета.Я использовал BaseHTTPServer для подачи музыки из песочницы, которую я написал, чтобы люди не могли получить доступ к произвольным файлам.Потоки были кошмаром.(Я вспоминаю ошибку, когда вам нужно было передать специальные аргументы Popen, так как многопоточность вызывала неявный ответвление, которое приводило к зависанию висячих файловых дескрипторов.) Были и другие проблемы.Код нужно было много реорганизовать.Это может быть очень полезно для личного проекта, но является значительным мероприятием и не стоит его для бизнеса, которому нужен только веб-сайт.

Я знаю двух стартапов, которые были довольны использованием Pylons (используя Paste) или Turbogears.(используя CherryPy) в прошлом, если вы ищете облегченный стек веб-сервера Python.Хотя их шаблонные системы по умолчанию отсутствуют.Выбор между Apache и более экономичным веб-сервером на основе Python также может зависеть от навыков ваших соавторов.

8 голосов
/ 17 апреля 2011

Apache написан на C и предназначен для масштабирования, а BaseHTTPServer предназначен для локальных сред / тестирования / отладки.

Так что вам не следует использовать BaseHTTPServer для любых производственных площадок.

5 голосов
/ 17 апреля 2011

Веб-сервер Apache знает и поддерживает весь протокол HTTP, поэтому он может справиться со всеми сложностями, связанными с заголовками, сохранением соединений, кэшированием содержимого, всеми различными кодами ответов HTTP и их правильной обработкой и т. Д.

Вы должны понимать весь протокол HTTP и выражать его в коде, чтобы выйти за пределы вашего простого сервера HTTP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...