12

タイトルで述べたように、私は現在、それらの基本的な理解にかなり不快感を覚えています。

私の知る限り、mod_wsgiはApacheWebサーバーで実行できるWSGI仕様を実装しました。

それはC言語でコード化されました。

もう1つ、werkzeugは、便利なユーティリティを備えた一種のツールキットです。また、werkzeugがそのソース(serving.pyのmake_server)内に実装されている単純なサービスを実行できることも確認しました。werkzeugには便利な機能とシンプルなサーバー機能があることを知っています。

以下で知りたいこと。

Apache Webサーバーでwerkzeugに基づくFlaskのようなフレームワークを使用する場合、mod_wsgiは正確に何をしますか?

werkzeugには、mod_wsgiをサポートする必要のない基本的なhttpサーバー機能もあります。

mod_wsgiとwerkzeugの違いを誰かが説明できますか?

mod_wsgiとwerkzeugは、Webサーバーの観点から機能を複製しています。

4

2 に答える 2

26

WSGI は Web Server Gateway Interface の略で、(ほとんど) http://www.python.org/dev/peps/pep-0333/の PEP 333 で定義されています。

Web サーバーが Python アプリケーションと通信するための標準メカニズムを確立することは、Python コミュニティによる取り組みです。

理論的には、wsgi 準拠のサーバー (または既存の Web サーバーの拡張機能) は、wsgi 準拠のアプリケーションを読み込んで実行できるはずです。

werkzeugは、Apache+mod_wsgi などの準拠した WSGI サーバーで実行できる Web アプリケーション フレームワークです。また、開発に使用できる組み込みの開発サーバーも含まれています。


WSGI は最初は非常に混乱する可能性がありますが、実際には非常に単純です。WSGI 仕様では、Python アプリケーションで次のことを行う必要があります。

  1. という名前の callable を定義するapplication
  2. 上記の callable は 2 つのパラメーターを受け入れる必要があります: ( environ, start_response)
  3. environ環境変数の辞書です
  4. start_response応答を開始するために呼び出す必要がある callable です

が呼び出されるapplicationと、リクエストを処理し、出力を構築して、次のことを行います。

  1. 通話start_response('200 OK', Headers)
  2. return [content]

シンプルな WSGI アプリは次のようになります。

def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'

    response_headers = [('Content-type', 'text/plain'),
                    ('Content-Length', str(len(output)))]
    start_response(status, response_headers)

    return [output]

HTTP リクエストの解析、ファイルのアップロードの処理、文字のエンコードなどには多くの詳細が含まれているため、既存の WSGI フレームワークを使用することを強くお勧めします。

Bottle、Flask、werkzeug、AppStruct などを見てみましょう...

于 2012-10-02T04:37:58.930 に答える
14

mod_wsgipython と apache を橋渡しする wsgi 準拠の python モジュールです。これにより、Apache の下で wsgi 仕様にコーディングされたアプリケーションを実行できます。

werkzeugwsgi 準拠のアプリケーションを構築するために使用される wsgi ユーティリティ ライブラリです。開発サーバーに同梱されています。

Pyramid/Pylons、Flask、Bottle、Django、CherryPy など、いくつかの Python Web アプリケーション フレームワークがあります。これらはすべて、Python で Web アプリケーションを構築するためのデファクト スタンダードである WSGI 仕様を実装しています ( http:// en.wikipedia.org/wiki/Web_Server_Gateway_Interface )

ほとんどの Web アプリケーション フレームワークには、デバッグ専用または本番対応の Web サーバーが付属しています。WSGI アプリがある場合は、ライブラリのアプリを介してサービスを提供したり、 を介して Apache を介してサービスを提供したり、、 、、mod_wsgiなどの「純粋な」 wsgi サーバーを使用したりできます。uWSGIgunicornfapwstwisted

私が知っているほとんどの人は、次のような wsgi アプリをデプロイします。

  • nginx などの軽量サーバーは、ポート 80 でリッスンします。
  • 軽量サーバーは静的ファイル自体を提供します
  • 軽量サーバーは、uWSGI リクエストを別のサーバー (多くの場合は uWSGI ですが、場合によっては apache+mod_wsgi など) にプロキシします。セットアップに応じて、プロキシは http プロキシにするか、直接またはソケット経由で uWSGI サーバーに接続することができます。

そうは言っても、あなたの質問に具体的に答えるには、このドキュメントページの最初の段落を読んでください - http://werkzeug.pocoo.org/docs/serving/ :

WSGI アプリケーションを提供する方法はたくさんあります。開発中は、通常、Apache のような本格的な Web サーバーを起動して実行するのではなく、単純なスタンドアロンの Web サーバーを使用する必要があります。そのため、Werkzeug には組み込みの開発サーバーが付属しています。

開発上の理由から、または非常にトラフィックの少ないサイトでは、Werkzeug サーバーを使用できます。妥当な量のトラフィックを取得するアプリケーションをデプロイする場合は、より堅牢なものが必要になります。

mod_wsgi または uWSGI は Werkzeug のサービス提供機能を複製しますが、応答時間の短縮、メモリの削減、同時実行性の向上、安定性など、かなり優れているため、それを行います。Werkzeug サーバーは多くの用途で「十分に優れている」 、ただし、wsgi 準拠のアプリを提供するための「最善の方法」ではありません。

于 2012-10-02T05:06:50.693 に答える