2016-08-10 9 views
1

私はtornado HTTPサーバーを持っています。竜巻でHTTPブロードキャストメッセージを送信するにはどうすればよいですか?

broad-castメッセージをtornadoサーバーで実装するにはどうすればよいですか?

そのための機能はありますか、またはすべてのクライアントがループしている通常のHTTPメッセージを送信するだけです。

通常のHTTPメッセージを送信すると、サーバーは応答を待つ必要があります。

broad-castのコンセプトではないようです。

それ以外の場合は、broad-castの3番目の別のオプションが必要ですか?

broad-castメッセージを実装するよう提案してください。

答えて

1

短い回答:WebSocketに興味があるかもしれません。竜巻はこれを支持しているようだ。

長い答え:サーバーからすべてのクライアントへのブロードキャストを指しているとします。 残念ながら、それは思考の方法のためにHTTP/1.1では概念的に実行できません。クライアントはサーバーの何かを尋ね、サーバーは他のすべてのサーバーとは独立して応答します。

さらに、クライアントとサーバーの間で要求はないが、その関係はまったく存在しないと言える。したがって、ブロードキャストする場合は、現在サーバーと通信していないクライアントを逃すことになります。

認められているように、物事は単純ではありません。多くのクライアントは、サーバーと通信するときに長時間のTCP接続を維持し、それに対するHTTP要求をパイプライン処理します。また、単一の要求はアトミックではなく、応答はパケットで送信されます。このアプローチでは、WebSocketまたはHTTP/2の前にサーバープッシュ/ロングポーリングを実装しましたが、これについては今すぐに進むより良い方法があります。

1

Tornadoには、ブロードキャストメッセージのビルトインアイデアはありません。トルネードに含まれているのWebSocketチャットのデモは、どのようにそれぞれにメッセージを送信するクライアントのリストをループに示しています

def send_updates(cls, chat): 
    logging.info("sending message to %d waiters", len(cls.waiters)) 
    for waiter in cls.waiters: 
     try: 
      waiter.write_message(chat) 
     except: 
      logging.error("Error sending message", exc_info=True) 

を参照してくださいhttps://github.com/tornadoweb/tornado/blob/master/demos/websocket/chatdemo.py

関連する問題