Python 學習筆記9 - Tornado
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 的比較