Tornado就是我们在 FriendFeed 的 Web 服务器及其常用工具的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其 非阻塞的方式和对epoll的运用,Tornado 每秒可以处理数以千计的连接,因此 Tornado 是实时 Web 服务的一个 理想框架。
解决方案:RequestDispatcher 在没有找到 handler 默认设置将 handler 为 ErrorHandler,
如果指定了 default_handler_class ,就使用 default_handler_class 。
说白了 404 错误就是路由不匹配,
可以看到 ErrorHandler 继承自 RequestHandler 而并非自定义的 BaseHandler 类
所以即使你在 BaseHandler 中定义了 write_error 方法, ErrorHandler 中也不会有 write_error 的处理逻辑
解决方案:
1.调低了连接池最大连接数
2.做几台主从,读写分离
3.在tornado中加了一个hook,在重启前add_reload_hook中增加了一个release的函数
def release():
from lib.query import _mysql_server
for key in _mysql_server:
db = _mysql_server[key]
db.close()
def run():
application_settings = {
'handlers': urls,
'debug': DEBUG,
}
application = tornado.web.Application(**application_settings)
options.parse_command_line()
init_log(options.log_dir)
application.listen(options.port)
io_loop = tornado.ioloop.IOLoop.instance()
# 这段代码是解决autoreload造成连接数没有断开的问题
tornado.autoreload.add_reload_hook(release)
tornado.autoreload.start(io_loop)
io_loop.start()
URL:https://www.v2ex.com/t/262338
解决方案:
Tornado支持通过x-real-ip或x-forwarded-for来获取IP,
但前提是需要在你的HTTPServer实例中增加xheaders=True参数
http_server = HTTPServer(Application(), xheaders=True)
或 application.listen(8080, xheaders=True)
nginx配置x-forwarded-for时只需在反向代理规则中增加一行:
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
解决方案:CSS只是被HTML文件引用,是在用户的浏览器上被载入,
没有经过tornado模板引擎的处理,{{static_url(“img/button_go.gif”)}}是不会被转换成文件的实际地址的。
直接设置 相对路径 ,或避免css文件中出现image属性
青冥有晓月