一、tornado 的hello world
1)导入模块包(2个)
2)创建处理类+定义get方法(服务器处理类)
3)设置路由 (创建对象app,1参列表,列表里映射元组,元组是url)
4)绑定监听接口 (8888)
5)启动监听
#1.导入模块包(2个) #调用 xx函数=处理类
import tornado.web #浏览器访问 类、函数
import tornado.ioloop #输入输出/循环
#目的:访问127.0.1:8888/显示hello world #处理函数=类,!!继承于父类
#2.创建处理类 基于服务器处理的类
class IndexHandler(tornado.web.RequestHandler): #RequestHandler请求处理器
#!!重写一个get方法
def get(self):
self.write("Hello, world!")
#3.设置路由 创建对象application,1参是列表,列表里是元组(多个映射是元组),元组是URL的
app=tornado.web.Application([
(r'/',IndexHandler)
])
#4.绑定端口 #绑定监听端口+ip地址 默认127.0.0.1本机
app.listen(8885)
#5.启动监听 instance获取实例,单线程
tornado.ioloop.IOLoop.instance().start()
二、IO多路复用(多个客户端2)
1.单客户端
套接字=ip+port端口号
2.多客户端(客户端上万个)
IO多路复用支持三种方式:
1)select:连接上限1024 Win/Linux
n次交互,不断轮询每一个socket对象,就是已经连接的还要再问一下,所以效率低下。
2)poll: Linux
3)epoll:链接数量无限制 Linux
1次交互,轮询1次,给每个对象绑定一个 回调函数,休眠变成就绪,对socket端口进行读写操作。
小小红:处理类
小小蓝:Indexhandler,处理完有响应,返回给“处理器”,返回给“IOloop”,返回给“客户端”,看到消息(异步请求:Indexhandler处理类。阻塞:可以先放弃这个请求,直接响应,告诉客户端还没有处理好,返回的是一个状态而不是结果,再往下。)
小长红:路由分发器,匹配正则调用相应处理类(匹配访问路径,刚刚匹配‘/’调用Indexhandler)
红:IOloop
蓝:epoll(内核中的epoll机制)
绿:socket对象(就绪状态,则跟客户端建立好链接)
小蓝:多个客户端发起请求