2011-12-05 13 views
3

でのようなものを閉じていません。 私がFreeBSD上でサーバを実行すると、ページ/リソースがロードされるまでに時間がかかることがあります。デバッグしようとすると 私は、ページがロードされるのを待っているときにリクエストオブジェクトを作成せず、netstat結果ESTABLISHEDの状態で多くの接続を参照してください。トルネード接続は、私は竜巻のWebサーバーを使用しているFreeBSDの

私の考えでは、接続が閉じられていない可能性が非常に高く、オペレーティングシステムは同じセッションからの新しい接続を拒否します。

これは可能ですか?

返信前に接続をシャットダウンして終了する必要がありますか?

EDIT 1:取得/ポストは同期している(なし@Asynchronous)

EDIT 2:KEEP_ALIVE接続はそう長くした後開いたままにする必要がある場合、一時的にno_keep_alive

class BasicFeedHandler(tornado.web.RequestHandler): 

    def finish(self, chunk=None): 
     self.request.connection.no_keep_alive = True 
     tornado.web.RequestHandler.finish(self, chunk) 

を強制的に固定され、私はわからないんだけどクライアントの接続が閉じられていれば、この回避策が動作します。
HTTPConnection._finish_request、キープアライブがない場合は 、この行はself.stream.read_until(b("\r\n\r\n"), self._header_callback)です。 この文脈では\ r \ n \ r \ nとは何ですか?

+1

は、あなたが疑問にしている場合は、 'self.finish'を呼び出してみてください。 –

+0

ハンドラのget/setメソッドが非同期であると宣言されていますか? – lbolla

+1

これは、竜巻漏れのファイル記述子に関するメーリングリストに多くの苦情があると知られている問題のようです。 –

答えて

1

これを試してみてください:

class Application(tornado.web.Application): 
    def __init__(self): 
     ... 

http_server = tornado.httpserver.HTTPServer(Application(),no_keep_alive=True) 
http_server.listen(port) 
tornado.ioloop.IOLoop.instance().start() 
関連する問題