## 3 `wsgiref.simple_server` - シンプルな WSGI HTTP サーバ

このモジュールは WSGI アプリケーションを提供する シンプルな HTTP サーバです（`BaseHTTPServer` がベースです）。 個々のサーバインスタンスは単一の WSGI アプリケーションを、特定のホストとポート上で 提供します。もし一つのホストとポート上で複数のアプリケーションを提供したいならば、 `PATH_INFO` をパースして個々のリクエストでどのアプリケーションを呼び出すか 選択するような WSGI アプリケーションを作るべきです。（例えば、 `wsgiref.util` から `shift_path_info()` を利用します。）

`make_server`( | host, port, app [, server_class=`WSGIServer` [, handler_class=`WSGIRequestHandler`]])

  host と port 上で待機し、 app へのコネクションを受け付ける WSGI サーバを作成します。戻り値は与えられた server_class のインスタンスで、 指定された handler_class を使ってリクエストを処理します。app は PEP 333 で 定義されるところの WSGI アプリケーションでなければいけません。

  使用例：

      from wsgiref.simple_server import make_server, demo_app

      httpd = make_server('', 8000, demo_app)
      print "Serving HTTP on port 8000..."

      # プロセスが死ぬまでリクエストに答える
      httpd.serve_forever()

      # 代替：１つのリクエストを受けて終了する
      ##httpd.handle_request()

`demo_app`( | environ, start_response)

  この関数は小規模ながら完全な WSGI アプリケーションで、 "Hello world!" メッセージと、environ パラメタに提供されている キー／値のペアをを含むテキストページを返します。 これは WSGI サーバ（`wsgiref.simple_server` のような）が シンプルな WSGI アプリケーションを正しく実行できるかを確かめるのに便利です。

クラス `WSGIServer`( | server_address, RequestHandlerClass)

  `WSGIServer` インスタンスを作成します。server_address は `(host,port)` のタプル、そして RequesthandlerClass は リクエストの処理に使われる `BaseHTTPServer.BaseHTTPRequestHandler` の サブクラスでなければいけません。

  `make_server` が細かい調整をやってくれるので、 通常はこのコンストラクタを呼ぶ必要はありません。

  `WSGIServer` は `BaseHTTPServer.HTTPServer` のサブクラスですので、 この全てのメソッド（`serve_forever()` や `handle_request()` のような）が 利用できます。 `WSGIServer` も以下のような WSGI 固有メソッドを提供します：

  `set_app`( | application)

    呼び出し可能（callable）な application を リクエストを受け取る WSGI アプリケーションとして設定します。

  `get_app`( | )

    現在設定されている呼び出し可能（callable）アプリケーションを返します。

  しかしながら、通常はこれらの追加されたメソッドを使う必要はありません。 `set_app()` は普通は `make_server()` によって呼ばれ、 `get_app()` は主にリクエストハンドラインスタンスの便宜上存在する からです。

クラス `WSGIRequestHandler`( | request, client_address, server)

  与えられた request（すなわちソケット）の HTTP ハンドラ、 client_address（`host,port)` のタプル）、 server（`WSGIServer` インスタンス）の HTTP ハンドラを作成します。

  このクラスのインスタンスを直接生成する必要はありません；これらは 必要に応じて `WSGIServer` オブジェクトによって自動的に生成されます。 しかしながら、このクラスをサブクラス化し、`make_server()` 関数に handler_class として与えることは可能でしょう。サブクラスにおいて オーバーライドする意味のありそうなものは：

  `get_environ`( | )

    リクエストに対する WSGI 環境を含む辞書を返します。デフォルト実装では `WSGIServer` オブジェクトの `base_environ` 辞書属性のコンテンツを コピーし、それから HTTP リクエスト由来の様々なヘッダを追加しています。 このメソッド呼び出し毎に、PEP 333 に指定されている関連する CGI 環境変数を 全て含む新規の辞書を返さなければいけません。

  `get_stderr`( | )

    `wsgi.errors` ストリームとして使われるオブジェクトを返します。 デフォルト実装では単に `sys.stderr` を返します。

  `handle`( | )

    HTTP リクエストを処理します。デフォルト実装では実際の WGI アプリケーション インターフェースを実装するのに `wsgiref.handlers` クラスを使って ハンドラインスタンスを作成します。