0

http 永続接続の場合、次のコードを書きました。

class LongPolling(tornado.web.RequestHandler):
    waiters = set()
    def get(self):
        LongPolling.waiters.add(self)
        for x in LongPolling.waiters:
            x.write("Broadcast all")
            x.flush()
        return

    def on_close(self):
        logging.warning("Connection closed *********")
        LongPolling.waiters.remove(self)

if __name__ == "__main__":
    application = tornado.web.Application([
        (r"/", LongPolling),
    ])
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

新しい接続が来るたびにブロードキャストしています..しかし、これの問題はget()、接続が閉じた直後です。

では、get() 呼び出しの後に接続を開くにはどうすればよいでしょうか?

4

1 に答える 1

2

「永続的な」http 接続などというものはありません。ヘッダーにより、Connection: keep-aliveクライアントとサーバーは新しい基礎となる tcp 接続を作成せずに新しい http 要求/応答サイクルを実行し、ネットワーク トラフィックを少し節約できますが、それはアプリケーションには見えません。通常、リバース プロキシによってサーバー側に実装されます。クライアントは、GET への応答を受信したときに、新しい要求を作成する必要があります。

それがあなたが考えていたものではなく、一度に少しずつ要求に応答したいという場合は、 を探しているかもしれませんtornado.web.asynchronous。ただし、ほとんどのブラウザー内クライアントは、これからあまり恩恵を受けないことに注意してください。たとえば、XHR は応答が完了するまで起動されないため、ブラウザ アプリケーションはとにかく新しい要求を開始する必要があります。

于 2013-01-02T20:55:34.077 に答える