参考:http://sebug.net/paper/books/tornado/
从github中下载tornado代码,里面有blog等demo实例
Tornado 当中使用了 一种非阻塞式的 I/O 模型,所以可以改变这种默认的处理行为——让一个请求一直保持 连接状态,而不是马上返回,直到一个主处理行为返回。要实现这种处理方式,只需要 使用 tornado.web.asynchronous 装饰器就可以了。
使用了这个装饰器之后,你必须调用 self.finish() 已完成 HTTTP 请求,否则 用户的浏览器会一直处于等待服务器响应的状态:
class MainHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(self):
self.write("Hello, world")
self.finish()
异步 HTTP 客户端
Tornado 包含了两种非阻塞式HTTP 客户端实现:SimpleAsyncHTTPClient 和 CurlAsyncHTTPClient。前者是直接基于 IOLoop 实现的,因此无需外部依赖关系。 后者作为 Curl 客户端,需要安装 libcurl 和 pycurl 后才能正常工作,但是对于使用 到 HTTP 规范中一些不常用内容的站点来说,它的兼容性会更好。为防止碰到 旧版本中异步界面的 bug,我们建议你安装最近的版本的 libcurl 和 pycurl。
实例:对于Tornado,使用的部署方案为前端使用 nginx 做反向代理,带动 4 个线程模式的 Tornado,这种方案也推荐在生产环境下的 Tornado 部署方案(根据具体的硬件情况,我们推荐一个 CPU 核对应一个 Tornado 伺服实例, 我们的负载测试使用的是四核处理器)。
Tornado 对 WSGI 只提供了有限的支持,即使如此,因为 WSGI 并不支持非阻塞式的请求,所以如果你使用 WSGI 代替 Tornado 自己的 HTTP 服务的话,那么你将无法使用 Tornado 的异步非阻塞式的请求处理方式。 比如 @tornado.web.asynchronous、httpclient 模块、auth 模块, 这些将都无法使用。
tornado 其它设计用来被复写的方法有:
get_error_html(self, status_code, exception=None, **kwargs) - 以字符串的形式 返回 HTML,以供错误页面使用。
get_current_user(self) - 用户认证
get_user_locale(self) - 返回 locale 对象,以供当前用户使用。
get_login_url(self) - 返回登录网址,以供 @authenticated 装饰器使用
get_template_path(self) - 返回模板文件的路径(默认是 Application 中的设置)
学习Tornado的MVC思想:
https://github.com/the5fire/practice_demo
此作者博客是the5fire, 特别好,非常推荐
http://www.the5fire.com/tornado-mvc-helloworld-2.html