9、Tornado
1Tornado 开发基础
1-1 Tornado 概述
特点:
1) 非阻塞式服务器
2) 速度相当快
3) 既是web server也是web framework
安装:
>pip install tornado
验证:
C:\Users\Administrator>python
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:32:19) [MSC v.1500 32 bit (
Intel)] on win32
Type "help", "copyright", "credits" or"license" for more information.
>>> import tornado
>>>
知乎的服务端就是使用tornado开发的
1-2 创建Tornado应用
Tornado需要手动创建项目
vim
运行:
python main.py --port=9000
localhost:9000
1-3 模板和表单
渲染模板的方法:self.render(‘index.html’)
模板的语法– 变量、控制语句、自定义函数
➜ tornado python
Python 2.7.6 (default, Jun 22 2015,18:00:18)
[GCC 4.8.2] on linux2
Type "help","copyright", "credits" or "license" for more information.
>>> from tornado.template importTemplate
>>> content =Template("<html><body>{{con}}</bady></html>")//变量
>>> printcontent.generate(con="hello world")
<html><body>helloworld</bady></html>
>>>
>>> content =Template("<html><body>{{[x for x inrange(10)]}}}</bady></html>") //控制语句
>>> print content.generate()
<html><body>[0, 1, 2, 3, 4, 5,6, 7, 8, 9]}</bady></html>
>>>
>>> def demo(s):
... return 'hello '+s
...
>>> demo('world')
'hello world'
>>> printTemplate("{{d('world')}}").generate(d=demo) //函数
hello world
>>>
模板文件:
template_path = os.path.join(os.path.dirname(__file__),”templates”)
静态文件- JS CSS文件
static_path = os.path.join(os.path.dirname(__file__),”static”)
加快静态文件的加载的速度方法:<href=’{{ static_url(“1.css”)}}’>
1-4 数据库操作
base64
➜ tornado python
Python 2.7.6 (default, Jun 22 2015, 18:00:18)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or"license" for more information.
>>> import base64
>>> import uuid
>>> printbase64.b64encode(uuid.uuid4().bytes+uuid.uuid4().bytes)
jGnJFmflSJu9HYz4ApTBkBHi56dBQkessSMGFnDCzM0=
>>>
mysql - torndb
安装:
sudoapt-get install python-mysqldb
sudopip install torndb
注意:torndb依赖mysqldb
mongodb – nosql – big data
asyncmongo- 异步的接口,正好契合tornado的框架
2Tornado开发-异步实现
2-1 异步的使用
同步:提交请求 -> 等待服务器处理-> 处理完毕返回
这个期间客户端浏览器不能干任何事
异步:请求通过事件触发-> 服务器处理 -> 处理完毕
这时浏览器仍然可以做其他的事件
2-2 Tornado的基础异步调用
使用异步生成器
yield – 每当使用时,才会调用 - 节省性能,提高性能
并发
2-3 Tornado的长轮询以及Websocket – 实时的获取信息
长轮询– 聊天室
Websocket – 全双工
3Tornado开发 - 高性能解读
3-1 epoll 介绍
poll本质是linux系统调用,作用是监控资源是否可用
epoll – event poll
select
优点:
支持一个进程打开大数目的socket描述符
IO效率不会随socket描述符数量的提升而线性下降
使用mmap加速内核与用户空间的消息传递
epoll的C接口
intepoll_create(int size)
intepoll_ctl(int epfd, int op, int fd, struct epoll_event *event)
intepoll_wait(int epfd, struct poll_event *event, int max, int timeout)
3-2 Tornado 高性能解读
3-3 RequestHandler 和 Application
在web.py
Application类:
__init__
listen
add_handlers – 添加路由的转发规则
add_transform – 添加输出的过滤器
__call__
RequestHandler类
Tornado的工作流程
3-4 Tornado Webserver
将Django部署到Tornado中,将它作为HTTP server来使用
4Tornado 开发 - TCP 编程
4-1 tornado 在 TCP 层的工作
TCP:
面向连接的、可靠的、基于字节流的传输层通信协议
与http的区别:
传输数据可以只用TCP,但是传出的数据是无法识别的,因此需要应用层的协议去解析,如HTTP,FTP
应用:
面向连接,对传输的数据有可靠,安全性的要求,就需要使用TCP
TCP建立连接过程:三次握手
4-2 ioloop 相关 API 介绍
4-3 iostream 相关 API 介绍
4-4 RPC 介绍以及使用
4-5 twisted 的介绍以及与 tornado 的比较