Python学习笔记17—Tornado
实例
#!/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 + ', welcome you to read: python') 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://localhost:8000
http://localhost:8000/?greeting=keven
Web服务器的工作流程
- 创建 listen socket, 在指定的监听端口, 等待客户端请求的到来
- listen socket 接受客户端的请求, 得到 client socket, 接下来通过 client socket 与客户端通信
- 处理客户端的请求, 首先从 client socket 读取 http 请求的协议头, 如果是 post 协议, 还可能要读取客户端上传的数据, 然后处理请求, 准备好客户端需要的数据, 通过 client socket 写给客户端
引入模块
import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web
这四个都是 Tornado 的模块,在本例中都是必须的。它们四个在一般的网站开发中,都要用到,基本作用分别是:
• tornado.httpserver:这个模块就是用来解决 web 服务器的 http 协议问题,它提供了不少属性方法,实现客户端和服务器端的互通。Tornado 的非阻塞、单线程的特点在这个模块中体现。
• tornado.ioloop:这个也非常重要,能够实现非阻塞 socket 循环,不能互通一次就结束呀。
• tornado.options:这是命令行解析模块,也常用到。
• tornado.web:这是必不可少的模块,它提供了一个简单的 Web 框架与异步功能,从而使其扩展到大量打开的连接,使其成为理想的长轮询。