繁体   English   中英

Tornado连接没有在freeBSD中关闭

[英]Tornado connections not closing in freeBSD

我有一个龙卷风网络服务器,如:

app = tornado.web.Application(handlersList,log_function=printIt)
app.listen(port)
serverInstance = tornado.ioloop.IOLoop.instance()  
serverInstance.start()

处理程序由tornado.web.RequestHandler 当我在freeBSD上运行服务器时,有时页面/资源需要很长时间才能加载,尝试调试我看到在等待页面加载时Tornado还没有创建请求对象,并且查看netstat结果,我看到了很多与状态ESTABLISHED的连接。

所以我的想法是有太多未关闭的连接,操作系统拒绝来自同一会话的新连接。

情况可能如此吗?

我在写入后没有做任何事情,发布函数,我应该在返回之前以某种方式关闭/关闭连接吗?

编辑1:get / post是同步的(没有@asynchronous)

编辑2:通过强制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) 

我不确定keep_alive连接是否应该在客户端关闭连接后保持打开,这种解决方法的任何工作方式。
我发现如何通过查看HTTPConnection._finish_request来执行此操作,当没有保持活动时,此行self.stream.read_until(b("\\r\\n\\r\\n"), self._header_callback)运行。 什么是\\ r \\ n \\ r \\ n在这种情况下?

尝试这个:

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM