18

WSGI start_response関数の実際の例を教えてください。(Webサーバーはその機能をwsgiアプリケーションに提供します)

を導入する目的が理解できませんstart_response

(私は WSGI 標準に関する 10 の同一のテキストを読みました。それらはすべて「WSGI 標準は...」と言っています

4

3 に答える 3

14

WSGIstart_response()関数の実際の例を教えてください。

start_response()関数 forは の2678mod_wsgiで定義されています。mod_wgsi.c

「WSGIは...のためにこのように設計されている」とは誰も言いません

での WSGI の設計のこの側面については、あまり根拠がないように思われますPEP3333web-sig メーリング リストのアーカイブを調べていると、このメッセージに出くわしました...

しばらく前に、次のバージョンの WSGI から start_response 関数を削除するという決定に反対しました。その理由として、start_callable がなければ非同期拡張をサポートできないという事実を使用しました。

現在、start_response を削除すると、コルーチン (または、少なくともいくつかのコルーチンの使用) をサポートできなくなることがわかりました。

[...]

...これは、読む価値があるかもしれない実装のこの部分の理論的根拠についての長いスレッドを開始しました。

WSGI インターフェースのこの側面の起源を本当に知りたい場合は、2003 年 12 月のこの最初のドラフトと2004 年 8 月のその後のドラフトの間の多くのメッセージを読む必要があります。


アップデート

それは他のプロトコルとどのように互換性がありますか?

私はあなたが何を意味するのかよくわかりません。初期のドラフトをすべて無視すると、WSGI 1.x インターフェイスは 2 つの異なる方法で使用できます。

「非推奨」の方法は...

def application(environ, start_response):
    write = start_response(status, headers)
    write('content block 1')
    write('content block 2')
    write('content block 3')
    return None

...そして「推奨される」方法は...

def application(environ, start_response):
    start_response(status, headers)
    return ['content block 1',
            'content block 2',
            'content block 3']

おそらく、両方を使用できます...

def application(environ, start_response):
    write = start_response(status, headers)
    write('content block 1')
    return ['content block 2',
            'content block 3']

...しかし、結果の動作は未定義になる可能性があります。

このブログ投稿を見ると、検討されている新しい WSGI 2.x メソッドは...

def application(environ):
    return (status,
            headers,
            ['content block 1',
             'content block 2',
             'content block 3'])

...これにより callable が削除されstart_response()、明らかに callableも削除されますwrite()が、これが WSGI 1.x に取って代わる可能性が高い時期 (または可能性がある場合) についての兆候はありません。

于 2013-05-27T14:53:26.917 に答える