2017-05-08 3 views
0

私はwebsocketハンドラを持つWebアプリケーションを作成しています。成功した接続ごとに、websocketハンドラオブジェクトをリストに追加しています。 PostResultHandlerと呼ばれる別のハンドラクラスは、POSTデータを受け入れます。このPostResultHandlerは、jsonデータを送信するバックグラウンドプロセスによって呼び出されます。このjsonデータがPostResultHandlerによって受信されると、私はWebソケットのリストに書き込みたい。他のURLハンドラから竜巻のWebソケットのリストに書き込む

現在、私はWebソケットのリストを繰り返し、jsonデータを書き込んでいます。しかし、私はそれがブロック呼び出しであり、結果がすべてのWebソケットに書き込まれるまでPostResultHandlerを呼び出すバックグラウンドプロセスがブロックされると思う。

バックグラウンド・プロセスは、任意の遅延

答えて

1

The Tornado examples folder includes a chat demo with websocketsせずに実行し続けますようにコード非ブロッキングのこの作品を作るためにどのような方法がありますが、それは単にん:

for waiter in cls.waiters: 
     try: 
      waiter.write_message(chat) 
     except: 
      logging.error("Error sending message", exc_info=True) 

これはないですブロッキングコール。メッセージはすぐにサーバーにバッファリングされ、コードは実行を継続します。

0

ioloopにコールバックを追加して、各websocketハンドラインスタンスのデータを送信することをお勧めします。次のようなことができます。

tornado.ioloop.IOloop.instance()。add_callback(部分(websocket_handler_instance.write_message、MSG))

関連する問題