2012-05-15 6 views
11

WSGIの機能を理解しようとしており、何か助けが必要です。WSGIの理解

これまでのところ、サーバーとアプリケーションのミドルウェアの一種であり、問​​題のフレームワークにWSGIアダプタがある場合は、アプリケーションとの異なるアプリケーションフレームワーク(サーバー側に存在する)とアプリケーションのインターフェイスに使用されていました。理論的な部分を続けると、私はサーバーがアプリケーションと通信するために、サーバーが呼び出し可能な呼び出しを行うことを知っています(環境変数とstart_response関数の2つの引数をとります)。ここでは、start_response関数はサーバー(?)によって提供され、応答状態とヘッダーの後に応答本体が続くアプリケーションによって使用されます。

私は上に書いたことはほとんど分かりませんので、初心者の質問です: 1)一般的なコールフローとは何ですか?アプリケーションはサーバーに呼び出し可能を提供し、サーバーはその呼び出し可能関数を使用してアプリケーションを呼び出し、env_varsとstart_response関数を引数として使用します。

2)最も混乱しているのは、アプリケーションが要求ヘッダーを送信してから、応答本体も送信することです。どのようなタイプのリクエストですか?

私はこの物の周りに頭を上げることができないので、私を啓発してください。

ありがとうございます!

+1

。 http://www.python.org/dev/peps/pep-3333/ –

答えて

7

コールフローは次の通りである:

  1. サーバーのHTTP接続を持って、
  2. サーバが身体を読み、httpリクエスト行とヘッダを解析され、
  3. サーバーは、環境辞書を移入
  4. サーバーコールアプリケーションenvironstart_responseを呼び出して、
  5. アプリケーション呼び出し可能な通話応答ステータスとレスポンスヘッダとstart_responseを、サーバーへ
  6. アプリケーションリターンレスポンスボディ、
  7. サーバーは、クライアントへのHTTP応答を送信します。

リクエスト/レスポンスは、wsgiプロトコルで定義されているインターフェースです(例:status = '200 OK'、response_headers = [( 'Content-type'、 'text/plain')) http要求/応答では同じものではありません。

スタンドライブラリモジュールwsgirefを参考にして参照できます。

+0

それで、それはすべて1つのプロセスにありますか? (アプリケーションおよびWebサーバー) – Pynchia

+0

手順4は単一プロセスで行う必要があります。しかし、http接続を受け入れるサーバは別のプロセスであってもよい。 fastcgi、scgiなどのプロトコルを使用してリクエスト情報を別のプロセスに渡すことができます。 – freestyler

+0

ありがとうございますが、どのプロセス(OSプロセス)が関与しているのか、またどの時点まで問題があるのか​​を明確にするのに役立ちます。たとえばデーモンとしてのApache w/mod_wsgiの場合。それぞれの要求はまったく同じプロセスで処理されますか? Pythonはどこで実行されますか? – Pynchia

4

あなたはそれについての詳細を知るために、これを読むことができます:あなたがこれまでに読んだことが何言っていないので、あなたがいない場合は、実際のP​​EPを読み確保

http://agiliq.com/blog/2013/07/basics-wsgi/