5
私はDjangoアプリで長時間のポーリングを使用して、長時間の操作に関するステータスメッセージをクライアントに返します。これは、文字列を返すイテレータで初期化されたビュー関数でHttpResponseオブジェクトを返すことで行います。これはすべてうまくいくが、反復子関数は状態メッセージを返すために何トンもの歩留まりでかなり長くなっている。Djangoのロングポーリング
長い操作を複数の関数に分割し、それぞれが独自のステータスメッセージを返すようにすることで、これをよりうまく設計したいと考えています。しかし、私はこれを行う方法を見ることができません。
def my_long_operation():
do_something()
yield "Did something"
do_something_else()
yield "Did something else"
...と私が持っているしたいと思います:つまり、私はこれを持っている
def do_something():
do_first_part_of_something()
yield "Did first part of something"
do_second_part_of_something()
yield "Did second party of something"
def do_something_else():
do_first_part_of_something_else()
yield "Did first part of something else"
do_second_part_of_something_else()
yield "Did second party of something else"
def my_long_operation():
do_something()
do_something_else()
がに値を得るために、第二の例では収量を得るためにいくつかの方法がありますイテレータの呼び出し元?そうでない場合、より良いアプローチがありますか?私はWebSocketを見ましたが、まだ完全にベークされていないようです(特にブラウザのサポートの点で)。私はまた、サーバーの実際のポーリングを考慮しましたが、それははるかに複雑なので、私は可能な限りオープンな接続とストリームメッセージを維持し続けたいと思います。
が私を義務付ける..しかし、どのようにあなたがこれを使用することを期待しますし、このために働きますか? – arustgi
一言で言えば、HttpResponse(my_long_operation()、mimetype = "text/plain")を使用してレスポンスオブジェクトを作成し、HTMLテンプレートでreadyStateChangeリスナをリクエストに添付して、ready状態が変わるたびに新しいデータでHTMLを更新します。 –
FWIW、IMHO長いポーリングは実装するのに苦労する可能性があります。あるシナリオが望ましいが、より頻繁ではないが、一意のIDを即座に返信し、ステータスをポーリングするためのURLを提供する方が実装がはるかに簡単である。状態を保持するためにDbまたはシングルトンを使用している場合は、これは素晴らしいことです。もちろん、長いポーリングが完璧な仕組みなので、これをゴスペルにしないでください – Basic