最近,正在开始使用tornado框架,tornado:有解决高并发,异步非阻塞,即是服务器又是框架,性能优越,速度快。django呢,开发很高效,第三方库齐全,后台管理全自动化。
1.首先:安装tornado
在cmd下:pip install tornado
2.helloworld
#!/usr/bin/env Python
#coding:utf-8
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
from tornado.options import define, options
define("port", default=8000, help="run on the given port", type=int)
class IndexHandler(tornado.web.RequestHandler):
def get(self):
greeting = self.get_argument('greeting', 'Hello')
self.write(greeting + ', this is my first tornado web')
if __name__ == "__main__":
tornado.options.parse_command_line()
app = tornado.web.Application(handlers=[(r"/", IndexHandler)])
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
在浏览器输入:http://127.0.0.1:8000/ 即出现hello,this is my first tornado web
3.介绍web服务器工作流程
以下图借自http://kenby.iteye.com/blog/1159621
web服务器工作原理:
(1) 创建listen socket, 在指定的监听端口, 等待客户端请求的到来
(2) listen socket接受客户端的请求, 得到client socket, 接下来通过client socket与客户端通信
(3) 处理客户端的请求, 首先从client socket读取http请求的协议头, 如果是post协议, 还可能要
读取客户端上传的数据, 然后处理请求, 准备好客户端需要的数据, 通过client socket写给客户端
然后就可以介绍前面的代码了
tornado.httpserver:是为服务器提供http协议,实现客户端和服务器的来连接,而且tornado非阻塞,单线程也体现在这里。
tornado.ioloop:用于处理 socket 相关的连接、响应、异步读写等网络事件,能够实现非阻塞 socket 循环
tornado.options:命令行解析模块
tornado.web:web框架与异步功能
导入tornado.options中的模块,定义了访问的端口号
接下来是一个请求处理类:用get方法请求url,并且反馈信息。
下面是主程序:
第一句,是解析命令行的语句。
第二句第三句,将application实例化,handlers建立网站请求集合,通过httpserver参数调用,实现http协议服务器访问。HTTPServer 是一个单线程非阻塞 HTTP 服务器,执行 HTTPServer 一般要回调 Application 对象,并提供发送响应的接口。
第四句,服务器监听端口号。
第五句,开始接收HTTP请求。