このモジュールは WSGI アプリケーションを提供する
シンプルな HTTP サーバです(BaseHTTPServer がベースです)。
個々のサーバインスタンスは単一の WSGI アプリケーションを、特定のホストとポート上で
提供します。もし一つのホストとポート上で複数のアプリケーションを提供したいならば、
PATH_INFO
をパースして個々のリクエストでどのアプリケーションを呼び出すか
選択するような WSGI アプリケーションを作るべきです。(例えば、 wsgiref.util から
shift_path_info() を利用します。)
host, port, app [, server_class=WSGIServer [, handler_class=WSGIRequestHandler]]) |
使用例:
from wsgiref.simple_server import make_server, demo_app httpd = make_server('', 8000, demo_app) print "Serving HTTP on port 8000..." # プロセスが死ぬまでリクエストに答える httpd.serve_forever() # 代替:1つのリクエストを受けて終了する ##httpd.handle_request()
environ, start_response) |
server_address, RequestHandlerClass) |
(host,port)
のタプル、そして RequesthandlerClass は
リクエストの処理に使われる BaseHTTPServer.BaseHTTPRequestHandler の
サブクラスでなければいけません。
make_server が細かい調整をやってくれるので、 通常はこのコンストラクタを呼ぶ必要はありません。
WSGIServer は BaseHTTPServer.HTTPServer のサブクラスですので、 この全てのメソッド(serve_forever() や handle_request() のような)が 利用できます。 WSGIServer も以下のような WSGI 固有メソッドを提供します:
application) |
) |
しかしながら、通常はこれらの追加されたメソッドを使う必要はありません。 set_app() は普通は make_server() によって呼ばれ、 get_app() は主にリクエストハンドラインスタンスの便宜上存在する からです。
request, client_address, server) |
host,port)
のタプル)、
server(WSGIServer インスタンス)の HTTP ハンドラを作成します。
このクラスのインスタンスを直接生成する必要はありません;これらは 必要に応じて WSGIServer オブジェクトによって自動的に生成されます。 しかしながら、このクラスをサブクラス化し、make_server() 関数に handler_class として与えることは可能でしょう。サブクラスにおいて オーバーライドする意味のありそうなものは:
) |
) |
wsgi.errors
ストリームとして使われるオブジェクトを返します。
デフォルト実装では単に sys.stderr
を返します。
) |