Tornado网路框架
解决10K以上的并发连接,C10K问题,设计使得其成为一个拥有非常高性能的框架。此外,它还拥有处理安全性、用户验证、社交网络以及与外部服务(如数据库网站API)进行异步交互的工具。
背景:Apache会为每个HTTP连接分配线程池中的一个线程,如果所有线程都被占用并尚有内存可用时,则生成一个新的线程。大多数Linux都是默认线程堆大小为8MB,大负载下,维护一个大的线程池等待数据极易迅速消耗服务器的内存资源。
Tornado采用了单线程事件循坏的方式,因此所有应用程序的代码都要采异步和非阻塞的方式。
异步是指在结束之前就会返回。几种不同类型的异步接口:
回调参数(Callback argument)
返回一个站位符(Return a placeholder)
发送到一个队列(Deliver to a queue)
回调注册表(Callback registry)
Tornado推荐使用协程来写异代码,协程通过使用python的yield关键字来代替链式调用从而挂起和恢复进程。用协程方式写的代码就跟同步代码一样却没有像同步一样浪费一个线程,通过减少上下文切换,协程使得并发更加容易。
一个tornado应用总是会包含一个或多个RequestHandler的子类、一个将请求传入Handler的Application对象和一个用来启动应用的main()函数。
Application对象
RequestHandler的子类 -- 在一个Handler中,我们通过调用render(),write()等函数来作为请求的响应。render()返回一个template网页和一系列相关参数给客户端;write()直接返回字符串、字节码、字典(作为JSON数据)。