新增AI编程课程,引领技术教育新趋势
import tornado from tornado import ioloop,httpserver from tornado.web import RequestHandler,url from tornado.options import define,options tornado.options.define("port",type=int,default=8002,help="服务器客户端") #默认配置 class IndexHandler(RequestHandler): def get(self):#get请求 self.write("hello Tornado") #发送hello Tornado到缓冲区,可以发送多个,这里到最后会默认执行self.finish(),将所有缓冲区信息发送给报文 #入口文件if __name__ == '__main__': tornado.options.parse_command_line() app = tornado.web.Application([(r"/",IndexHandler),], debug=True) #路由映射 http_server = tornado.httpserver.HTTPServer(app) http_server.listen(options.port) #监听8002端口 tornado.ioloop.IOLoop.current().start() #开始循环监听
RequestHandler
封装了对应一个请求的所有信息和方法,write(响应信息)就是写响应信息的一个方法;对应每一种http请求方式(get、post等),把对应的处理逻辑写进同名的成员方法中(如对应get请求方式,就将对应的处理逻辑写在get()方法中),当没有对应请求方式的成员方法时,会返回“405: Method Not Allowed”错误。
Application
Tornado Web框架的核心应用类,是与服务器对接的接口,里面保存了路由信息表,其初始化接收的第一个参数就是一个路由信息映射元组的列表;其listen(端口)方法用来创建一个http服务器实例,并绑定到给定端口(注意:此时服务器并未开启监听)
tornado的核心io循环模块,封装了Linux的epoll和BSD的kqueue,tornado高性能的基石。 以Linux的epoll为例,其原理如下图:

IOLoop.current() 返回当前线程的IOLoop实例。
IOLoop.start() 启动IOLoop实例的I/O循环,同时服务器监听被打开。
小结:
1. tornado高性能Web原理是利用Linux epoll IO多路模型和协程异步编程
2. tornado Web框架核心模块是 web 和 核心事件循环模块是 IOLoop
上面的例子是get请求,下面我们再来看一下post请求如何做
import tornado from tornado import ioloop,httpserver from tornado.web import RequestHandler,url from tornado.options import define,options tornado.options.define("port",type=int,default=8002,help="服务器客户端") class IndexHandler(RequestHandler): def post(self): # a = self.get_body_arguments("a") a = self.get_body_argument("a") print(a) self.write("a的值为%s"%