0

gevent内でtornado.httpserver.HTTPServerを実行する方法はありますか?

私は大きなファイルのアップロード用の単純なプロキシ サーバーを作成しています。アイデアは単純です。サーバーの束の空き領域を監視し (これまでのところ問題はありません)、PUT 要求を WebDAV サーバーの 1 つにルーティングする必要があります。効率のためにチャンクごとにストリーミングしたいのですが、gevent の pywsgi に基づくソリューションを思いつくことができませんでした。

settings = setup()
log.info('Listening on %s:%d' % (settings.host, settings.port))

# server for request routing
server = WSGIServer((settings.host, settings.port), app)

# separate greenlet to periodically get info about cluster free space
monitor = gevent.spawn(storage_monitor, settings.timeout)

# setup a proper signals to stop server and monitor greenlet
gevent.signal(signal.SIGTERM, monitor.kill)
gevent.signal(signal.SIGINT, monitor.kill)
gevent.signal(signal.SIGQUIT, monitor.kill)

gevent.signal(signal.SIGTERM, server.stop)
gevent.signal(signal.SIGINT, server.stop)
gevent.signal(signal.SIGQUIT, server.stop)

# start the server
server.start()
gevent.wait()

多分私は一般的に何かを理解していませんか?gevent docs はまだ 1.0 に更新されていないので、かなりの作業です :)

また、ユーザー gevent の StreamServer + カスタム プロトコルの方がよいのでしょうか。

4

1 に答える 1

2

Tornado と greenlet スタイルの同時実行性を組み合わせることは可能ですが (例: Motor、またはこの質問に対するトップの回答を参照)、これは複雑であり、主に同期と非同期の世界の間のブリッジとして機能します。新しいプロジェクトでは、複数の複雑なフレームワークを組み合わせるのではなく、1 つのスタイルを選択してそれに固執することをお勧めします。

次に、Tornado の HTTPServer は現在 (バージョン 3.1) ストリーミング リクエストをサポートしていないため、必要なものも得られません。Twisted もそうだと思いますが、これらを組み合わせるよりも、Twisted または gevent のいずれかを選択することをお勧めします。

于 2013-10-04T12:55:53.903 に答える